{
"_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] }
}}
])
现在我想更新该值。如何更新?
答案 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
})