sql >> データベース >  >> NoSQL >> MongoDB

$lookupのmongodbのネストされた配列

    mongodbバージョンをお持ちの場合3.6 次に、ネストされた $lookupを試してみてください。 集約...

    db.collection.aggregate([
      { "$lookup": {
        "from": Albums.collection.name,
        "let": { "albums": "$albums" },
        "pipeline": [
           { "$match": { "$expr": { "$in": [ "$_id", "$$albums" ] } } },
           { "$lookup": {
             "from": Songs.collection.name,
             "let": { "songs": "$songs" },
             "pipeline": [
               { "$match": { "$expr": { "$in": [ "$_id", "$$songs" ] } } }
             ],
             "as": "songs"
           }}
         ],
         "as": "albums"
      }}
     ])
    

    そして、長い説明のために、あなたは$lookup複数のレベルを通過することができます$ unwind?

    または、 3.6より前のmongodbバージョンを使用している場合

    db.collection.aggregate([
      { "$lookup": {
        "from": Albums.collection.name,
        "localField": "albums",
        "foreignField": "_id",
        "as": "albums"
      }},
      { "$unwind": "$albums" },
      { "$lookup": {
        "from": Songs.collection.name,
        "localField": "albums.songs",
        "foreignField": "_id",
        "as": "albums.songs",
      }},
      { "$group": {
        "_id": "$_id",
        "name": { "$first": "$name" },
        "started_in": { "$first": "$started_in" },
        "active": { "$first": "$active" },
        "country": { "$first": "$country" },
        "albums": {
          "$push": {
            "_id": "$albums._id",
            "title": "$albums.title",
            "released": "$albums.released",
            "type": "$albums.type",
            "songs": "$albums.songs"
          }
        }
      }}
    ])
    



    1. Codeigniterを使用したMongoDBサーバーへのリモート接続

    2. find({})は空の配列マングースを返します

    3. キードキュメントmongodb集計を変更する

    4. ネストされたオブジェクトプロパティでMongoDB$neを使用する方法