MongoDB:查找具有一定价值的数组元素?

时间:2017-12-05 04:55:40

标签: mongodb match aggregation-framework

{
"_id" : ObjectId("55caf0298c1c44740469306c"),
"data" : {
    "field" : {
        "fields" : [
            {
                "name" : "demo",
                "type" : "data",
                "value" : "A"
            }
        ]
    }
}

}

我想只有那些数组元素应该出现在值= A,休息是空白的所以它不应该显示。

欲望输出:

{
    "_id" : ObjectId("55caef098c1c447404693064"),
    "data" : {
        "field" : {
            "fields" : [
                {
                    "value" : "A"
                }
            ]
        }
    }
}

在找到文档中的所有值后,我想修改这些值。

注意:value = A并不总是第一个元素,它可以是第二个第3个元素。并且在每个文档中"值" :" A"不是没有固定它可以是不同的像#34;价值" :" B",只有我想要那些值键具有价值的文件以及它不应显示的空白。

查询:

db.getCollection('collection').aggregate([
    {$match: {'data.field.fields.name': 'demo'}},
    { "$project": {
        "_id": 0,
        "value": { "$arrayElemAt": ["$data.field.fields.value", 0] }

    }}
])

现在我想更新该值。如何更新?

2 个答案:

答案 0 :(得分:0)

如果您的mongodb版本高于3.2,则可以使用$ filter进行投影https://docs.mongodb.com/master/reference/operator/aggregation/filter/#exp._S_filter

希望这个帮助

        db.yourtable.aggregate([
        {$project: {
            "data.field.fields": {$filter: {
                                    input: '$data.field.fields',
                                    as: 'fields',
                                    cond: {$ne: ['$$fields.value', '']}
            }}
        }}
    ])

答案 1 :(得分:0)

db.collection.find({
    'data.field.fields': {
        $elemMatch: {
            value: 'A'
        }
    }
}, {
    'data.field.fields.$': 1
})