我在NodeJS中使用mongoose使用的底层mongodb驱动程序3.5.5,使用最新的MongoDB服务器4.2.5社区,得到了以下更新查询:
await mongoose.connection.db.collection('cluster1kms').updateOne({"location.coordinates": [point.longitude, point.latitude]}, {
$set: {
weight: {
$divide: [
{
$add: [
{
$multiply: ["$weight", "$count"]
},
point.weight
]
},
{
$add: ["$count", 1]
}
]
}
},
$inc: {"count": 1}
}, {upsert: false});正如标题中所示,我总是遇到$divide不是有效的存储名称的问题。MongoDB应该允许在更新中使用聚合管道,但我似乎没有成功做到这一点。在online MongoDB web shell中也尝试了相同的方法,错误是相同的。
我错过了什么吗?
谢谢
发布于 2020-04-07 22:19:06
正如您所说,从4.2版开始,MongoDB允许使用aggregated pipelines,但是使用它们的语法发生了一些变化。
在您的例子中,这有点简单,我们只需要用[]包装更新节并更改$inc,因为流水线更新不支持它。
await mongoose.connection.db.collection('cluster1kms').updateOne({"location.coordinates": [point.longitude, point.latitude]},
[
{
$set: {
weight: {
$divide: [
{
$add: [
{
$multiply: ["$weight", "$count"]
},
point.weight
]
},
{
$add: ["$count", 1]
}
]
},
count: {$add: ["$count", 1]} // this replaces the $inc.
}
}
])https://stackoverflow.com/questions/61081272
复制相似问题