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

mongodb $match operasi di $lookup untuk membandingkan objectId tidak berfungsi seperti yang diharapkan

Coba ini

const { user } = req;

productsModels.aggregate([
            { $sort: { '_id': -1 } },
            { $limit: 10 },
            {
                $lookup: {
                    from: 'likes',
                    let: {productId:"$_id"},
                    pipeline: [
                        {
                            $match: {
                                $expr:{$eq:['$_id', '$$productId']}},
                                'userId': mongoose.Type.Object(user.id)
                            }
                        }
                    ],
                    as: 'liked'
                }
            },
        ]);}

Dalam permintaan Anda, dua hal yang hilang

1) Konversi userid ke id objek mongo jadi kami menggunakan mongoose.Types.ObjectId

2) Anda tidak dapat menggunakan bidang koleksi luar secara langsung di pipa bagian dalam karena ini Anda telah membuat variabel temp jadi kami menggunakan let untuk mendeklarasikan dan mencocokkan dengan bidang internal kita perlu menggunakan $expr




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Hapus objek dari array bersarang dengan $pull dan $[identifier] (mongoDB 3.6)

  2. MongoDB:Bentuk kueri geo yang salah dengan $geoIntersect pada poligon

  3. Jika Mongo $lookup adalah gabungan luar kiri, lalu mengapa ia mengecualikan dokumen yang tidak cocok?

  4. cara memperbarui dan memasukkan catatan di php menggunakan mongodb

  5. Cara membuat array array skema objek di Mongoose.js