在集合中使用 $sum - Mongodb

Use of $sum inside set - Mongodb

我有以下问题。

我想在我的 mongodb 数据库中为每个文档创建一个新字段。该字段应包含文档中其他两个字段的总和值。

我试过这个:

  db.collection('restaurants').updateMany(
    {}, { $set: 
      { allScores: {$sum: "$grades.score"} } 
    }
  )

但它不起作用。我收到以下错误:

'allScores.$sum' 中的美元 ($) 前缀字段“$sum”对于存储无效。

为什么我不能在 $set 中使用 $sum? 我能做些什么呢?

我使用的数据库可以在这里找到:https://www.w3resource.com/mongodb-exercises/

谢谢!

茱莉亚

const MongoClient = require('mongodb').MongoClient;
ObjectID = require('mongodb').ObjectID;

// Connection URL
const url = 'mongodb://localhost:27017';

// Database Name
const dbName = 'myproject';

// Use connect method to connect to the server
MongoClient.connect(url, { useNewUrlParser: true }, function(error, client) {

    if(error) {
        return console.log('An error occured!')
    }
  console.log("Connected successfully to server");

  const db = client.db(dbName);

  var objectId = new ObjectID();


  db.collection('restaurants').updateMany(
    {}, { $set: 
      { allScores: {$sum: "$grades.score"} } 
    }
  )

您可以使用 aggregate() with $out 来做到这一点:

db.collection('restaurants').aggregate([
    {$addFields : {allScores : {$sum : "$grades.score"}}},
    {$out : "restaurants"}
])

此代码的作用:

1-查找restaurants内的所有文档;
2- 将字段 allScores 添加到每个文档;
3- 将所有文档保存回集合 restaurants;