sql >> Databáze >  >> NoSQL >> MongoDB

Filtrujte data pomocí mongoose naplnit

Zkuste prosím toto:

Jak jsem již navrhl, můžete použít toto:

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

Protože vidíte prázdné pole, je to kvůli dotazu filtru v match která nenajde vhodné dokumenty v kolekci komponent w.r.t. ObjectId v poli komponent databázového dokumentu, to je normální. Možná je můžete odfiltrovat v kódu, protože se nedíváte tímto způsobem, můžete použít $lookup mongoDB z agregačního rámce, který je ekvivalentní .populate() od mangusty.

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

Vzorová data ve sbírkách:

komponenty:

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

databáze:

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

Výstup:

/* 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. Mongoose dotaz vnořené dokumenty více či méně určité datum

  2. Jak mohu použít operátor „Nelíbí se mi“ v MongoDB

  3. Mongo převede vložený dokument na pole

  4. Vytvořte databázový klastr v cloudu pomocí MongoDB Atlas