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

Pencarian MongoDB ketika bidang asing adalah array

Anda dapat menggunakan $lookup dengan saluran khusus yang akan memberi Anda 0 atau 1 hasilnya lalu gunakan $size untuk mengonversi array menjadi nilai boolean tunggal:

db.reports.aggregate([
    {
        $lookup: {
            from: "users",
            let: { report_id: "$_id" },
            pipeline: [
                {
                    $match: {
                        $expr: {
                            $and: [
                                { $eq: [ "$name", "Mike" ] },
                                { $in: [ "$$report_id", "$favorites" ] }
                            ]
                        }
                    }
                }
            ],
            as: "users"
        }
    },
    {
        $project: {
            _id: 1,
            name: 1,
            favorite: { $eq: [ { $size: "$users" }, 1 ] }
        }
    }
])

Atau jika Anda perlu menggunakan versi MongoDB lebih rendah dari 3.6, Anda dapat menggunakan $lookup regular biasa lalu gunakan $filter untuk mendapatkan hanya pengguna yang name adalah Mike :

db.reports.aggregate([
    {
        $lookup: {
            from: "users",
            localField: "_id",
            foreignField: "favorites",
            as: "users"
        }
    },
    {
        $project: {
            _id: 1,
            name: 1,
            favorite: { $eq: [ { $size: { $filter: { input: "$users", as: "u", cond: { $eq: [ "$$u.name", "Mike" ] } } } }, 1 ] }
        }
    }
])


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mengurangi ukuran file database MongoDB

  2. MongoDB mendapatkan dokumen pertama dan terakhir dalam kueri agregat

  3. Integrasi Power BI dengan Spring Angular

  4. Bagaimana urutan indeks gabungan penting dalam kinerja MongoDB?

  5. mongo $sum diperparah saat melakukan $unwind dan kemudian $group di beberapa bidang