Mongoose使用数组中的另一个值更新数组字段
考虑到我们有如下文件:Mongoose使用数组中的另一个值更新数组字段,mongoose,Mongoose,考虑到我们有如下文件: { "_id" : 1, "books" : [ { "a" : 80, "b" : 75 }, { "a" : 85, "b" : 100 }, { "a" : 85, "b" : 100 } ] } { "_id" : 2,
{
"_id" : 1,
"books" : [
{ "a" : 80, "b" : 75 },
{ "a" : 85, "b" : 100 },
{ "a" : 85, "b" : 100 }
]
}
{
"_id" : 2,
"books" : [
{ "a" : 90, "b" : 95 },
{ "a" : 95, "b" : 200 },
{ "a" : 85, "b" : 200 }
]
}
我需要一个查询,将books数组中每个元素的所有“a”值替换为“b”
我尝试了以下查询:
db.test.updateMany({}, {$set: {"books.$[].a": "$books.$.b"}}, {multi: true, upsert: true})
但它正在为所有“a”值而不是“b”值设置$books.$.b
的文本字符串。
你能告诉我我做错了什么吗?你可以试着启动rom MongoDB 4.2
迭代$map
数组循环和内部更改更新值书籍
,并使用a
将对象与当前对象合并$mergeObjects
迭代$map
数组循环和内部更改更新值书籍
,并使用a
将对象与当前对象合并$mergeObjects
这给了我错误。我用第二个参数对象代替数组,错误消失了,但结果是空的books数组。你能显示你得到的错误吗?这是mongodb 4.2提供的支持,而且由于mongo shell的旧版本,robo mongo将不支持这一点。这给了我一个错误。我用第二个参数对象代替数组,错误消失了,但结果是空的books数组。你能显示你得到的错误吗?这是mongodb 4.2提供的支持,而且由于mongo shell的旧版本,robo mongo将不支持这一点。
db.test.updateMany({},
[{
$set: {
books: {
$map: {
input: "$books",
in: {
$mergeObjects: ["$$this", { a: "$$this.b" }]
}
}
}
}
}]
)