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

ルックアップから最後のドキュメントを返す

    $sliceのいずれかを使用できます

    db.groups.aggregate([
       { "$lookup": {
         "from": "posts",
         "localField": "_id",
         "foreignField": "group",
         "as": "post"
       }},
       { "$addFields": {
         "post": { "$slice": ["$post", -1] }
       }}
    ])
    

    または、MongoDB 3.6では、$lookupを使用して最後の投稿を返すだけです。 相関のない形式:

    db.groups.aggregate([
       { "$lookup": {
         "from": "posts",
         "as": "post",
         "let": { "id": "$_id" },
         "pipeline": [
           { "$match": { 
              "$expr": { "$eq": [ "$$id", "$group" ] }
           }},
           { "$sort": { "_id": -1 } },
           { "$limit": 1 }
         ]
       }}
    ])
    

    実際に必要な外国のコレクションからのみドキュメントを返すため、後者の方が適しています。

    「特異」が必要な場合は、$arrayElemAt $sliceと互換性があります 最初の例では、最後の要素のみの配列ではなく、最後の要素を返します。これを2番目のフォームに追加して、パイプラインから1つの要素(「常に」配列)を取得することもできます。

    db.groups.aggregate([
       { "$lookup": {
         "from": "posts",
         "as": "post",
         "let": { "id": "$_id" },
         "pipeline": [
           { "$match": { 
              "$expr": { "$eq": [ "$$id", "$group" ] }
           }},
           { "$sort": { "_id": -1 } },
           { "$limit": 1 }
         ]
       }},
       { "$addFields": {
         "post": { "$arrayElemAt": [ "$post", 0 ] }
       }}
    ])
    

    そして、その周りは0です。 -1ではなくインデックス 最後に。




    1. 最大配列フィールドによる並べ替え、昇順または降順

    2. 何千もの中規模のドキュメントを保存するための最も効率的なドキュメント指向データベースエンジンは何ですか?

    3. 流星のMongoDBデータベースはどこにありますか?

    4. エラー:get呼び出しのためのnodejsのgetaddrinfo ENOTFOUND