Computer >> 컴퓨터 >  >> 프로그램 작성 >> MongoDB

깊은 하위 목록을 연결하는 MongoDB 쿼리가 있습니까?

<시간/>

$unwind와 함께 집계()를 사용하여 깊은 하위 목록을 연결합니다. 문서로 컬렉션을 만들자 −

> db.demo70.insertOne(
...    {
...
...       "first" : [
...          {
...             "details" : {
...                "second" : [
...                   {
...                      "StudentDetails" : {
...                      "Score" : 10
...                   }
...                },
...                {
...                   "StudentDetails" : {
...                   "Score" : 20
...                }
...             },
...             {
...                "StudentDetails" : {
...                   "Score" : 30
...                }
...             }
...          ]
...       }
...    },
...    {
...       "details" : {
...          "second" : [
...             {
...                "StudentDetails" : {
...                "Score" : 11
...                }
...             },
...             {
...                "StudentDetails" : {
...                   "Score" : 18
...                }
...             },
...             {
...                "StudentDetails" : {
...                   "Score" : 29
...                   }
...                }
...             ]
...          }
...       }
...    ]
... }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e29ad4d0912fae76b13d76d")
}

find() 메서드를 사용하여 컬렉션의 모든 문서 표시 -

> db.demo70.find().pretty();

이것은 다음과 같은 출력을 생성합니다 -

{
   "_id" : ObjectId("5e29ad4d0912fae76b13d76d"),
   "first" : [
      {
         "details" : {
            "second" : [
                  {
                     "StudentDetails" : {
                     "Score" : 10
                  }
               },
               {
                  "StudentDetails" : {
                     "Score" : 20
                  }
               },
               {
                  "StudentDetails" : {
                     "Score" : 30
                  }
               }
            ]
         }
      },
      {
         "details" : {
            "second" : [
               {
                  "StudentDetails" : {
                     "Score" : 11
               }
            },
            {
               "StudentDetails" : {
                  "Score" : 18
                  }
               },
               {
                  "StudentDetails" : {
                     "Score" : 29
                  }
               }
            ]
         }
      }
   ]
}

다음은 깊은 하위 목록을 연결하는 쿼리입니다 -

> db.demo70.aggregate([
... { $unwind: "$first" },
... { $unwind: "$first.details.second" },
... { $sort: { "first.details.second.StudentDetails.Score": -1 } },
... { $limit: 3 },
... { $replaceRoot: { newRoot: "$first.details.second.StudentDetails" } },
... { $sort: { "Score": 1 } }
... ]);

이것은 다음과 같은 출력을 생성합니다 -

{ "Score" : 20 }
{ "Score" : 29 }
{ "Score" : 30 }