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

Filter data menggunakan populasi luwak

Silakan coba ini :

Seperti yang sudah saya sarankan, Anda dapat menggunakan ini :

Database.find({})
    .populate({ path: 'components', match: { name: /antr/i }, select: 'name -_id' })
    .exec((err, data) => { console.log(err); res.json(data); });
 

Karena Anda melihat array kosong adalah karena kueri filter di match yang tidak menemukan dokumen yang sesuai dalam pengumpulan komponen w.r.t. ObjectIds dalam array komponen dokumen database, ini normal. Mungkin Anda dapat memfilternya dalam kode, karena Anda tidak melihat seperti itu, Anda dapat menggunakan $lookup mongoDB dari kerangka kerja agregasi yang setara dengan .populate() dari luwak.

Database.aggregate(
    [{
        $lookup: {
            from: "components",
            "let": { "ids": "$components" },
            pipeline: [
                { $match: { $expr: { $in: ['$_id', '$$ids'] } } }],
            as: "dbComponentsArray"
        }
    }, { $unwind: '$dbComponentsArray' }, { $match: { 'dbComponentsArray.name': /antr/i } },
    { $group: { _id: '$_id', dbComponentsArray: { $push: '$dbComponentsArray' }, data: { $first: '$$ROOT' } } }, { $addFields: { 'data.dbComponentsArray': '$dbComponentsArray' } },
    { $replaceRoot: { 'newRoot': '$data' } }])
 

Contoh Data dalam koleksi :

komponen :

/* 1 */
{
    "_id" : ObjectId("5d481cd098ba991c0857959f"),
    "name" : "antracito",
    "updatedAt" : ISODate("2019-08-05T12:10:56.777Z"),
    "__v" : 0
}

/* 2 */
{
    "_id" : ObjectId("5d481cd098ba991c0857958f"),
    "name" : "anacito",
    "updatedAt" : ISODate("2019-08-05T12:10:56.777Z"),
    "__v" : 0
}

/* 3 */
{
    "_id" : ObjectId("5d481cd098ba991c0857951f"),
    "name" : "antracito",
    "updatedAt" : ISODate("2019-08-05T12:10:56.777Z"),
    "__v" : 0
}

/* 4 */
{
    "_id" : ObjectId("5d481cd098ba991c0857952f"),
    "name" : "anacito",
    "updatedAt" : ISODate("2019-08-05T12:10:56.777Z"),
    "__v" : 0
}
 

basis data :

/* 1 */ { "_id" : ObjectId("5d4979d52a17d10a6c8de81b"), "components" : [ ObjectId("5d481cd098ba991c0857951f"), ObjectId("5d481cd098ba991c0857952f"), ObjectId("5d481cd098ba991c0857953f"), ObjectId("5d481cd098ba991c0857959f") ] }

Keluaran :

/* 1 */ { "_id" : ObjectId("5d4979d52a17d10a6c8de81b"), "components" : [ ObjectId("5d481cd098ba991c0857951f"), ObjectId("5d481cd098ba991c0857952f"), ObjectId("5d481cd098ba991c0857953f"), ObjectId("5d481cd098ba991c0857959f") ], "dbComponentsArray" : [ { "_id" : ObjectId("5d481cd098ba991c0857959f"), "name" : "antracito", "updatedAt" : ISODate("2019-08-05T12:10:56.777Z"), "__v" : 0 }, { "_id" : ObjectId("5d481cd098ba991c0857951f"), "name" : "antracito", "updatedAt" : ISODate("2019-08-05T12:10:56.777Z"), "__v" : 0 } ] }


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Apakah luwak memungkinkan beberapa permintaan basis data secara bersamaan?

  2. Dokumen tersemat bagian atas Mongodb

  3. Cara membuat indeks di MongoDB melalui .NET

  4. Koneksi soket SSL aplikasi Django ke firmware

  5. Seberapa amankah mode aman MongoDB pada sisipan?