MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Kembalikan Dokumen terakhir Dari Pencarian

Anda dapat menggunakan $slice

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

Atau dengan MongoDB 3.6, cukup kembalikan posting terakhir menggunakan $lookup dalam bentuk yang tidak berkorelasi:

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

Yang terakhir lebih baik karena Anda hanya mengembalikan dokumen dari koleksi asing yang benar-benar Anda inginkan.

Jika Anda yakin ingin "tunggal" maka $arrayElemAt dapat dipertukarkan dengan $slice dalam contoh awal tetapi mengembalikan elemen terakhir alih-alih array elemen terakhir saja. Anda juga dapat menambahkannya ke formulir kedua untuk mengambil satu elemen saja dari pipeline, yang "selalu" berupa array:

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 ] }
   }}
])

Dan sebaliknya adalah 0 indeks daripada -1 untuk yang terakhir.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jalankan skrip shell mongodb melalui driver C#

  2. MongoDB $atanh

  3. cari di agregasi mongodb

  4. temukan id dari subdokumen terbaru yang dimasukkan ke dalam luwak

  5. Bagaimana cara mencari objek dengan ObjectId-nya di konsol mongo?