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

Pencarian bersarang MongoDB dengan 3 level

Penyebab 'masalah' Anda adalah tahap agregasi kedua - { $unwind: "$address" } . Ini menghapus catatan untuk pesta dengan _id: 4 (karena larik alamatnya kosong, seperti yang Anda sebutkan) dan menghasilkan dua catatan untuk pihak _id: 1 dan _id: 5 (karena masing-masing memiliki dua alamat).

  • Untuk mencegah penghapusan pesta tanpa alamat, Anda harus menyetel preserveNullAndEmptyArrays pilihan $unwind tahap ke true .

  • Untuk mencegah duplikasi pihak untuk alamat yang berbeda, Anda harus menambahkan $group tahap agregasi ke saluran Anda. Juga, gunakan $project panggung dengan $filter operator untuk mengecualikan catatan alamat kosong dalam output.

db.party.aggregate([{
  $lookup: {
    from: "address",
    localField: "_id",
    foreignField: "party_id",
    as: "address"
  }
}, {
  $unwind: {
    path: "$address",
    preserveNullAndEmptyArrays: true
  }
}, {
  $lookup: {
    from: "addressComment",
    localField: "address._id",
    foreignField: "address_id",
    as: "address.addressComment",
  }
}, {
  $group: {
    _id : "$_id",
    name: { $first: "$name" },
    address: { $push: "$address" }
  }
}, {
  $project: {
    _id: 1,
    name: 1,
    address: {
      $filter: { input: "$address", as: "a", cond: { $ifNull: ["$$a._id", false] } }
    } 
  }
}]);


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Permintaan nomor panjang Java Mongodb

  2. mongoimport memilih jenis bidang

  3. Bagaimana saya bisa menggabungkan beberapa koleksi menjadi satu koleksi menggunakan $lookup mongodb atau nodejs mongodb?

  4. java.lang.NoClassDefFoundError saat menggunakan driver MongoDB

  5. Mengimpor file JSON menggunakan mongimport, terus mendapatkan `pengidentifikasi tak terduga`?