sql >> データベース >  >> NoSQL >> MongoDB

マングースポピュレートを使用してデータをフィルタリングする

    これを試してください:

    すでに提案したように、これを使用できます:

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

    空の配列が表示されているのは、matchのフィルタークエリが原因です。 コンポーネントコレクションw.r.tで適切なドキュメントが見つかりません。データベースドキュメントのコンポーネント配列内のObjectIds。これは正常です。あなたはそのように見ていないので、あなたはそれらをコードで除外することができるかもしれません、あなたはmongoDBの$lookupを使うことができます .populate()と同等の集約フレームワークから マングースから。

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

    コレクション内のサンプルデータ:

    コンポーネント:

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

    データベース:

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

    出力:

    /* 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. _idでグループ化するために集計を使用するPHPのMongoDBがnullで機能しない

    2. MongoDB:1つのコマンドで複数のドキュメントを更新するにはどうすればよいですか?

    3. ノードの「_id」でMongoDBエントリを検索する正しい方法

    4. MongoDBerrno111への接続が拒否されました