[MONGODB] 모든 문서의 배열의 단지 중첩 된 문서를 반환하는 방법
MONGODB모든 문서의 배열의 단지 중첩 된 문서를 반환하는 방법
나는 중첩 된 문서를 쿼리에 대한 질문이 있습니다. 나는 검색을 시도했지만 아무것도 내 질문에 대답하거나 어쩌면 그것을 바라 보는하고있다. 나는이 같은 구조를 가지고 :
{
"_id" : ObjectId("592aa441e0f8de09b0912fe9"),
"name" : "Patrick Rothfuss",
"books" : [
{
"title" : "Name of the wind",
"pages" : 400,
"_id" : ObjectId("592aa441e0f8de09b0912fea")
},
{
"title" : "Wise Man's Fear",
"pages" : 500,
"_id" : ObjectId("592aa441e0f8de09b0912feb")
},
},
{
"_id" : ObjectId("592aa441e0f8de09b0912fe9"),
"name" : "Rober Jordan",
"books" : [
{
"title" : "The Eye of the World",
"pages" : 400,
"_id" : ObjectId("592aa441e0f8de09b0912fea")
},
{
"title" : "The Great Hunt",
"pages" : 500,
"_id" : ObjectId("592aa441e0f8de09b0912feb")
}
},
그리고 저자의 전체 컬렉션의 모든 책 목록에 대한 질의 싶습니다 - 뭔가를 :
"books" : [
{
"title" : "The Eye of the World",
"pages" : 400,
"_id" : ObjectId("592aa441e0f8de09b0912fea")
},
{
"title" : "The Great Hunt",
"pages" : 500,
"_id" : ObjectId("592aa441e0f8de09b0912feb")
},
{
"title" : "Name of the wind",
"pages" : 400,
"_id" : ObjectId("592aa441e0f8de09b0912fea")
},
{
"title" : "Wise Man's Fear",
"pages" : 500,
"_id" : ObjectId("592aa441e0f8de09b0912fea")
}]
해결법
-
==============================
1.이 사용 .aggregate ()와 주로 $ 언 와인드 파이프 라인 연산자를 수행 할 수 있습니다
이 사용 .aggregate ()와 주로 $ 언 와인드 파이프 라인 연산자를 수행 할 수 있습니다
현대 MongoDB를 3.4 이상에서는 당신은 $ replaceRoot와 협력하여 사용할 수 있습니다
Model.aggregate([ { "$unwind": "$books" }, { "$replaceRoot": { "newRoot": "$books" } } ],function(err,results) { })
이전 버전에서는 $ 프로젝트와 모든 필드를 지정합니다
Model.aggregate([ { "$unwind": "$books" }, { "$project": { "_id": "$books._id", "pages": "$books.pages", "title": "$books.title" }} ],function(err,results) { })
$ 언 와인드는 해체 또는 "denormalise"처리를 위해 배열 항목을 사용하는 것입니다 그래서. 효과적으로는 어레이의 각 구성원의 전체 문서의 복사본을 생성한다.
작업의 나머지 부분 "은"해당 필드는 배열에 존재 반환에 관한 것입니다.
그래도 할 수있는 매우 현명한 일이 아니다. 당신의 목적은 문서의 배열에 포함에만 반환 내용 인 경우에, 당신은 대신 별도의 모음으로 콘텐츠를 넣어 더 좋을 것입니다.
그냥 단지 배열에서 해당 문서를 나열하려면 집계 프레임 워크 콜렉션에서 모든 문서를 따로 따로 당기는 훨씬 더 나은 성능을 위해입니다.
-
==============================
2.상술 한 설명 위에 따르면 MongoDB의 쉘에서 다음 쿼리를 실행 해보세요.
상술 한 설명 위에 따르면 MongoDB의 쉘에서 다음 쿼리를 실행 해보세요.
db.collection.aggregate( // Pipeline [ // Stage 1 { $unwind: "$books" }, // Stage 2 { $group: { _id:null, books:{$addToSet:'$books'} } }, // Stage 3 { $project: { books:1, _id:0 } }, ] );
from https://stackoverflow.com/questions/44226493/how-to-return-just-the-nested-documents-of-an-array-from-all-documents by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] $ 조회 집계 필드를 제외 (0) | 2019.12.07 |
---|---|
[MONGODB] 데이터베이스를 따기 후 인증합니다 (0) | 2019.12.07 |
[MONGODB] 통합 후 원본 문서 등을 다시 얻는 방법 (0) | 2019.12.07 |
[MONGODB] 몽구스 (또는 MongoDB를)에서 TransientTransactionError은 무엇인가? (0) | 2019.12.07 |
[MONGODB] MongoDB를, 인덱스 필드에 정규 표현식에 의해 쿼리의 성능 (0) | 2019.12.07 |