mongodb在从另一个字段派生的所有文档中添加字段



这是我需要添加到集合中的数据

let data = {
'a':'data a',
'ab':'data a',
'b':'data b',
'c':'data c'
}

这是我的收集数据:

{
name:'xyz',
age:'100',
arr: ['a','ab']
}

我想要什么:

{
name:'xyz',
age:'100',
arr: ['a','ab'],
data:'data a' //get this from arr first element, and that is key in data object that's value here 
}

有人能帮我写这个查询,在所有文档中添加新字段吗?

这里是相同的查询,但是,这次我想在所有文档中插入数据。

db.collection.update({},
[
{
$set: {
data: {
$objectToArray: {
"a": "data a",
"ab": "data a",
"b": "data b",
"c": "data c"
}
}
}
},
{
$set: {
index: { $indexOfArray: [ "$data.k", { $first: "$arr" } ] }
}
},
{
$set: {
data: {
$cond: {
if: { $eq: [ "$index", -1 ] },
then: null,
else: { $arrayElemAt: [ "$data.v", "$index" ] }
}
}
}
},
{
$unset: "index"
}
],
{
multi: true
})

mongoplayground

您只能在更新中添加聚合查询。

db.collection.update({},[
{
'$addFields': {
'data': {
'$objectToArray': {
'a': 'data a', 
'ab': 'data a', 
'b': 'data b', 
'c': 'data c'
}
}
}
}, {
'$addFields': {
'data': {
'$arrayElemAt': [
'$data.v', {
'$indexOfArray': [
'$data.k', {
'$first': '$arr'
}
]
}
]
}
}
}
], {multi:true})

如果需要更新多个文档,则必须通过{multi:true}

最新更新