首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MongoDB-减去

MongoDB-减去
EN

Stack Overflow用户
提问于 2019-12-06 04:41:48
回答 1查看 77关注 0票数 1

基本上,我想为每个对象减去finish-start。

因此,在下面的示例中,输出应该是2和4 ((7-5=2)和(8-4=4)),然后我想将这两个字段添加到我现有的文档中。

我如何在MongoDB中做到这一点?

代码语言:javascript
运行
复制
{   
    "title" : "The Hobbit",
    "rating_average" : "???",
    "ratings" : [
        {
            "title" : "best book ever",
            "start" : 5,
            "finish" : 7
        },
        {
            "title" : "good book",
            "start" : 4,
            "finish" : 8
        }
    ]
}
EN

回答 1

Stack Overflow用户

发布于 2019-12-06 06:06:17

不确定查询输出的确切要求是什么,但这可能会有所帮助。

查询:

代码语言:javascript
运行
复制
db.books.aggregate([
    { $unwind: "$ratings" },
    { $addFields: { "ratings.diff": { $subtract: [ "$ratings.finish", "$ratings.start" ] } } }
])

管道说明:

  1. 展开数组,因为$subtract不能作用于数组数据。
  2. 在'ratings‘子文档中添加了一个名为diff的新字段,其计算值为

编辑:

OP要求将结果存储在同一个子文档中。在与朋友和家人讨论后,我发现这是可能的,但只有在MongoDB 4.2或更高版本中才有可能。下面是一条可以实现预期结果的update语句。这是一个更新,而不是一个聚合。

更新:(特定于MongoDB 4.2或更高版本)

代码语言:javascript
运行
复制
db.books.update({
},
[
  {
    $replaceWith: {
      ratings: {
        $map: {
          input: "$ratings",
          in: {
            start: "$$this.start",
            finish: "$$this.finish",
            diff: {
              $subtract: [
                "$$this.finish",
                "$$this.start"
              ]
            }
          }
        }
      }
    }
  }
])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59202964

复制
相关文章

相似问题

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