MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Lọc dữ liệu bằng cách sử dụng quần thể mongoose

Vui lòng thử cái này:

Như tôi đã gợi ý, bạn có thể sử dụng cái này:

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

Vì bạn thấy mảng trống là do truy vấn bộ lọc trong match mà không tìm thấy tài liệu thích hợp trong bộ sưu tập thành phần w.r.t. ObjectIds trong mảng thành phần của tài liệu cơ sở dữ liệu, điều này là bình thường. Có thể bạn có thể lọc chúng ra trong mã, vì bạn không tìm kiếm theo cách đó, Bạn có thể sử dụng $lookup của mongoDB từ khung tổng hợp tương đương với .populate() từ mongoose.

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

Dữ liệu mẫu trong bộ sưu tập:

thành phần:

/* 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
}

cơ sở dữ liệu:

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

Đầu ra:

/* 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. Bản thảo tài liệu bằng Mongo

  2. Tìm theo id với mgo

  3. Cách phù hợp để quản lý các kết nối MongoDB trong ASP.Net MVC là gì?

  4. Trả về các phần tử mảng bên trong từ nhiều tài liệu ở dạng đã sắp xếp

  5. cập nhật nhiều bản ghi bằng mongoosejs trong nút