【问题标题】:Is is possible perform aggregation on a collection and update the same collection?是否可以对集合执行聚合并更新同一个集合?
【发布时间】:2016-02-07 09:00:27
【问题描述】:
{ "_id" : 1, "quizzes" : [ 10, 6, 7 ], "labs" : [ 5, 8 ], "final" : 80, "midterm" : 75 ,"extraMarks":10}
{ "_id" : 2, "quizzes" : [ 9, 10 ], "labs" : [ 8, 8 ], "final" : 95, "midterm" : 80 }
{ "_id" : 3, "quizzes" : [ 4, 5, 5 ], "labs" : [ 6, 5 ], "final" : 78, "midterm" : 70 }

这些是我收藏的文件。 按照

中的建议使用管道查询

$add with some fields as Null returning sum value as Null

我可以使用这个查询来预测字段的总和:

db.students.aggregate([
  {
    "$project": {
      "final": 1,
      "midterm": 1,
      "examTotal": {
        "$add": [
          "$final",
          "$midterm",
          {
            "$ifNull": [
              "$extraMarks",
              0
            ]
          }
        ]
      }
    }
  }
])

现在我们必须更新学生集合一个名为 total 的新字段作为与上述投影中的考试总数类似的字段?

【问题讨论】:

  • 简单明了:没有。
  • @MarkusWMahlberg 实际上,这取决于您所说的 NO 是什么意思。您可以使用“批量”操作迭代游标结果并更新您的文档。
  • @user3100115 这不言而喻,基本上与“如果我获取数据并插入它,它将被插入”的论点相同。如果我可以请您注意in上述投影?”

标签: mongodb mongodb-query aggregation-framework mongodb-java


【解决方案1】:

从 MongoDB 4.2 开始,您可以update with aggregation pipeline

db.students.update({},
[
  {
    $set: {
      "total": {
        "$add": [
          "$final",
          "$midterm",
          {
            "$ifNull": [
              "$extraMarks",
              0
            ]
          }
        ]
      }
    }
  }
])

这里是Mongo playground 供您参考。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    • 2023-02-26
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多