2017-11-01 5 views
0

MongoDB集計$ lookupを使用して2つの異なるスキーマコレクションを照会しています。このデータセットをmongoDBのユーザスキーマオブジェクトの配列として返します

私がしたいことは、各アーティストコレクションに追加されたすべてのユーザーを返すことです。ここ

これは、次のデータ構造を返すアーティストスキーマ

{ 
"_id" : ObjectId("59f7a13163241a5c8a580832"), 
"artistID" : "34657839393", 
"artistName" : "Mc squared", 
"userID" : ObjectId("599f14855e9fcf95d0fe11a7"), 
"__v" : 0 

}

Artist.aggregate([ 
    { 
     $match: { artistID } 
    }, 
    { 
     $lookup: { 
      from: "users", 
      localField: "userID", 
      foreignField: "_id", 
      as: "UsersWithMatchedArtist" 
     } 
    }, 
    { 
     $project: { 
      UsersWithMatchedArtist: 1 
     } 
    } 
} 
]) 

あります。

[ 
    { 
    "_id": "59f8f40686f2fa623d815256", 
    "UsersWithMatchedArtist": [{Users Schema}] 
    }, 
    { 
    "_id": "59f8f40686f2f12345678901", 
    "UsersWithMatchedArtist": [{Users Schema}}] 
    } 
] 

私がデータを希望するには、以下の構造

[ 
    {Users Schema}, 
    {Users Schema} 
] 

これを行う方法上の任意の提案に戻りましたか?提案は非常に高く評価されます!乾杯!

答えて

1

私は以下のこのクエリを使用した後だったデータセットを得た:

Artist.aggregate([ 
    { 
      $match: { artistID } 
     }, 
     { 
      $lookup: { 
       from: "users", 
       localField: "userID", 
       foreignField: "_id", 
       as: "UsersWithMatchedArtist" 
      } 
     }, 
     { 
      $project: { 
       user: { 
        $arrayElemAt: ["$UsersWithMatchedArtist", 0] 
       } 
      } 
     }, 
     { 
      $replaceRoot: { 
       newRoot: "$user" 
      } 
     } 
    ]) 

これは、データセット

[ 
    {Users Schema}, 
    {Users Schema} 
] 
を返します。
関連する問題