mongodb - 在多个字段上执行 mongodb $set 时,这些字段是否按顺序更新?
问题描述
我需要在 MongoDB 中进行一次原子更新,根据另一个字段中的现有值更新一个字段,然后更新第二个字段。这样做的目的是在添加新值时更新帖子的平均投票者得分,而不必存储每个投票并每次重新评估它们。
我找到了一个方程来做到这一点:
average = (size * average + value) / (size + 1);
然后我将其翻译成一个(有点难看,但希望是功能性的)MongoDB更新命令:
{
$set: {
'average' : {
'$divide' : [
{
'$add' : [
{ '$multiply' : [ 'size' , 'average' ] } ,
value
]
} ,
{ '$add' : [ 'size' , 1 ] }
]
} ,
'size' : {
'$add' : [ 'size' , 1 ]
}
}
}
问题是我必须同时使用“大小”字段(投票数)来更新“平均”字段(平均投票数),然后还要增加“大小”字段本身。我想知道的是,我能否确定“size”字段会在“average”字段之后更新,还是 $set 命令以不可预知的顺序执行?
解决方案
推荐阅读
- javascript - 乘法持久性代码战挑战
- python - 为什么 nginx 不会用 django 和 gunicorn 显示静态内容?
- blockchain - 为什么标题和块的数量不同?
- git - Git拉“错误:无法锁定参考”问题
- azure - How to set up Azure IP alias directly using DNS name?
- python - 抓取 Java 网页
- excel - Using a MsgBox and If Then to open another worksheet
- javascript - 如何在这两个 mongoose.js 1-1 关系上添加一个 id
- c++ - 如何通过另一个函数传递不断变化的成员函数?
- node.js - 如何在 Express.js 的 URL 中传递字符串列表