【发布时间】:2023-01-16 00:26:47
【问题描述】:
假设我想将所有嵌套值乘以 10。
{
foos: [
{ val: 1 },
{ val: 10 },
{ val: 5 },
]
}
// to
{
foos: [
{ val: 10 },
{ val: 100 },
{ val: 50 },
]
}
由于我们重用了现有的字段值,我假设我将不得不使用聚合运算符。
这里有一些尝试:
// Does not work, since it it unwinds the values from their parent object.
coll.updateMany({}, [
{$set: {
foos: {$map: {
input: '$foos',
as: 'foo',
in: {$multiply: ['$$foo.val', 10]}
}}
}}
])
// MongoServerError: $multiply only supports numeric types, not string
coll.updateMany({}, [
{
$set: {
'foos.val': {$multiply: ['$foos.$.val', 10]}
}
}
])
如果不获取文档并使用 JS 循环继续更新,这是否可能?
就像是:
coll.updateMany({}, [
{
$set: {
foos: {
$map: {
input: '$foos',
as: 'foo',
in: {
$project: {
blackMagicToSpreadtheOriginalFoo: '$$foo', // FIXME
val: { $multiply: ['$$foo.val', 10] }
}
}
}
}
}
}
])
【问题讨论】:
标签: mongodb aggregation-framework