首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"weight.$divide“中前缀为”$divide“的美元($)字段对于存储无效

"weight.$divide“中前缀为”$divide“的美元($)字段对于存储无效
EN

Stack Overflow用户
提问于 2020-04-07 21:35:32
回答 1查看 147关注 0票数 1

我在NodeJS中使用mongoose使用的底层mongodb驱动程序3.5.5,使用最新的MongoDB服务器4.2.5社区,得到了以下更新查询:

代码语言:javascript
复制
    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中也尝试了相同的方法,错误是相同的。

我错过了什么吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-07 22:19:06

正如您所说,从4.2版开始,MongoDB允许使用aggregated pipelines,但是使用它们的语法发生了一些变化。

在您的例子中,这有点简单,我们只需要用[]包装更新节并更改$inc,因为流水线更新不支持它。

代码语言:javascript
复制
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.
            }
        }
    ])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61081272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档