mongodb 在派生自另一个字段的所有文档中添加字段
mongodb add field in all documents derived from another field
这是我需要添加到集合中的数据
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
}
有人可以帮助我编写此查询以在所有文档中添加新字段吗?
get query for same 但是,这次我想在所有文档中插入数据。
只能在更新中添加聚合查询。
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}.
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
})
这是我需要添加到集合中的数据
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({},[
{
'$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}.
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
})