MongoDB过滤多个子文档

安德烈·托比托尼(Andre Torbitoni)

我在mongo DB中有一个这样的文档结构,我想过滤以仅显示活动的子文档:活动的汽车和活动的水果。

    {
       "name":"Andre",
       "fruits":[
           {
              "active":true,
              "fruitname":"apple" 
           },{
              "active":false,
              "fruitname":"banana" 
           }
       ],
       "cars":[
           {
               "active":false,
               "carname":"ford"
           },{
               "active":true,
               "carname":"GM"
           },
       ]
    }

这是我想要的结果。

    {
       "name":"Andre",
       "fruits":[
           {
              "active":true,
              "fruitname":"apple" 
           }
       ],
       "cars":[
          {
               "active":true,
               "carname":"GM"
           },
       ]
    }

我已经尝试过,Aggregate但是当任何汽车或任何水果活跃时,它什么也没有返回。

    m_object.aggregate([
        { $match : {
           "name": "andre"
       }},
       { $unwind : "$fruits" },
       { $unwind : "$cars" },
       { $match : {
        'fruits.active':{$eq: true}
        }},
       { $match : {
        'cars.active':{$eq: true}
        }},

    { $group : {
       "name": "$name",
       cars: { $addToSet : "$cars" }
       fruits: { $addToSet : "$fruits" }
    }}
    ], function (err, result) {
        if (err) {
            console.log(err);
            return;
        }
        console.log('result');
    });

有什么方法可以忽略"active":false那些子文档中的子文档?

克列丹

使用以下聚合管道可获得所需的结果:

var pipeline = [
    {
        "$match": {
            "name": "Andre",
            "fruits.active": true,
            "cars.active": true
        }
    },
    { "$unwind": "$fruits" },
    { "$unwind": "$cars" },
    {
        "$match": {            
            "fruits.active": true,
            "cars.active": true
        }
    },
    { 
        "$group": {
            "_id": {
                "_id": "$_id",
                "name": "$name"
            },
            "cars": { "$addToSet" : "$cars" },
            "fruits": { "$addToSet" : "$fruits" }
        }
    },
    {
        "$project": {
            "_id": 0,
            "name": "$_id.name",
            "cars": 1,
            "fruits": 1
        }
    }    
]

m_object.aggregate(pipeline)
        .exec(function (err, result) {
            if (err) {
                console.log(err);
                return;
            }
            console.log('result');
        });

或者,您可以使用聚合管道构建器,如下所示:

m_object.aggregate()
        .match({
            "name": "Andre",
            "fruits.active": true,
            "cars.active": true
         })
        .unwind("fruits")
        .unwind("cars")
        .match({
            "fruits.active": true,
            "cars.active": true
         })
        .group({
            "_id": {
                "_id": "$_id",
                "name": "$name"
            },
            "cars": { "$addToSet" : "$cars" },
            "fruits": { "$addToSet" : "$fruits" }
        })
        .project({
            "_id": 0,
            "name": "$_id.name",
            "cars": 1,
            "fruits": 1
        })
        .exec(callback);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MongoDB:排序多个子文档

来自分类Dev

MongoDB使用或查询更新多个子文档

来自分类Dev

如何在MongoDB中匹配多个子文档?

来自分类Dev

使用$ group对mongodb中多个子文档中的字段求和

来自分类Dev

如何在MongoDB中匹配多个子文档?

来自分类Dev

MongoDB-更新多个文档中数组中的多个子文档

来自分类Dev

MongoDB多个子查询

来自分类Dev

Mongoose 保存多个子文档

来自分类Dev

MongoDB-在node.js中使用多个$ elemMatch运算符更新多个子文档级别

来自分类Dev

通过猫鼬更新多个子文档?

来自分类Dev

在Mongo中搜索多个子文档

来自分类Dev

在Mongo中搜索多个子文档

来自分类Dev

如何在同一个子文档上使用多个条件查询和过滤 Solr 6.4 子文档?

来自分类Dev

在mongodb中搜索多个文档

来自分类Dev

多个文档之间的MongoDB dateDiff

来自分类Dev

如何从mongoDB获取多个文档?

来自分类Dev

在mongodb中更新多个文档

来自分类Dev

如何在MongoDB聚合管道中隐藏单个子文档?

来自分类Dev

如何替换MongoDB中的整个子文档数组?

来自分类Dev

在文档的子字段中过滤mongodb游标

来自分类Dev

MongoDb:聚合$ lookup并过滤外部文档

来自分类Dev

如何过滤mongoDB中的子文档?

来自分类Dev

mongodb嵌套文档的过滤器数组

来自分类Dev

MongoDB聚合-按子文档过滤

来自分类Dev

如何过滤mongoDB中的子文档?

来自分类Dev

在Firebase中的多个子属性上过滤产品

来自分类Dev

ElasticSearch - 带有多个子句的过滤查询 ES 5

来自分类Dev

Lucene使用多个过滤器过滤索引文档

来自分类Dev

在mongo中将多个子文档合并为一个新文档