Mongodb 使用一个请求更新数组子文档的字段
我收集了以下文件:Mongodb 使用一个请求更新数组子文档的字段,mongodb,Mongodb,我收集了以下文件: { _id: 'test', values: [ { foo: 1, bar: [<very big array>] }, { foo: 4, bar: [<very big array>] }, { foo: 3, bar: [<very big array>] } ] } 结果如下: { _id: 'test', values: [
{
_id: 'test',
values: [
{ foo: 1, bar: [<very big array>] },
{ foo: 4, bar: [<very big array>] },
{ foo: 3, bar: [<very big array>] }
]
}
结果如下:
{
_id: 'test',
values: [
{ foo: 2, bar: [<very big array>] },
{ foo: 3, bar: [<very big array>] },
{ foo: 4, bar: [<very big array>] }
]
}
{
_id:'测试',
价值观:[
{foo:2,bar:[]},
{foo:3,bar:[]},
{foo:4,bar:[]}
]
}
但我不知道我必须如何写我的更新请求
我使用的是MongoDB 4.0,没有访问4.2功能的权限。从v4.2开始,您可以从中受益 它使您能够使用和计算新阵列:
确保
值的大小与更新数组的大小相同。您是否使用MongoDB 4.2版或更高版本?如果是这样,我建议使用$function
。@Rfroes87我编辑了我的问题。我正在使用MongoDB 4.0。
{
_id: 'test',
values: [
{ foo: 2, bar: [<very big array>] },
{ foo: 3, bar: [<very big array>] },
{ foo: 4, bar: [<very big array>] }
]
}
db.collection.updateOne(
{_id: "test"},
[{$set: {
values: {
$map: {
input: {
$zip: {
inputs: [
"$values.bar",
[2,3,4]
]
}
},
as: "item",
in: {
foo: {
$arrayElemAt: [
"$$item",
1
]
},
bar: {
$arrayElemAt: [
"$$item",
0
]
}
}
}
}
}}]
)