MongoDB聚合框架未保留使用$addFields添加的内容

MongoDB聚合框架未保留使用$addFields添加的内容,mongodb,aggregation-framework,Mongodb,Aggregation Framework,字段被添加,但随后消失。 以下是mongo shell中的代码: > db.users.aggregate([{$addFields:{totalAge:{$sum:"$age"}}}]) { "_id" : ObjectId("5acb81b53306361018814849"), "name" : "A", "age" : 1, "totalAge" : 1 } { "_id" : ObjectId("5acb81b5330636101881484a"), "name" : "B",

字段被添加,但随后消失。 以下是mongo shell中的代码:

> db.users.aggregate([{$addFields:{totalAge:{$sum:"$age"}}}])
{ "_id" : ObjectId("5acb81b53306361018814849"), "name" : "A", "age" : 1, "totalAge" : 1 }
{ "_id" : ObjectId("5acb81b5330636101881484a"), "name" : "B", "age" : 2, "totalAge" : 2 }
{ "_id" : ObjectId("5acb81b5330636101881484b"), "name" : "C", "age" : 3, "totalAge" : 3 }
> db.users.find().pretty()
{ "_id" : ObjectId("5acb81b53306361018814849"), "name" : "A", "age" : 1 }
{ "_id" : ObjectId("5acb81b5330636101881484a"), "name" : "B", "age" : 2 }
{ "_id" : ObjectId("5acb81b5330636101881484b"), "name" : "C", "age" : 3 }

原因是,您的两种方法完全不同。在聚合中,您使用了$addFields,在该查询中,您将得到一个总计。但是,根据find查询,您可以获得存储在数据库中的特定数据。这里您没有计算totalAge


我希望您能理解。

原因是,您的两种方法完全不同。在聚合中,您在该查询中使用了$addFields,您将得到一个总计。但是,根据find查询,您可以获得存储在数据库中的特定数据。这里您没有计算totalAge


我希望您能理解。

仅聚合读取您收集的数据;它也不会编辑集合。考虑聚合的最佳方式是读取一些数据并对其进行操作,以便立即使用

如果要在主源中更改它,则必须使用更新方法

或者更简单的方法(不是最好的,但很简单)


仅聚合从您的集合中读取数据;它也不会编辑集合。考虑聚合的最佳方式是读取一些数据并对其进行操作,以便立即使用

如果要在主源中更改它,则必须使用更新方法

或者更简单的方法(不是最好的,但很简单)


聚合管道不会改变原始数据;它所做的是获取数据的临时内存副本,并对其执行一系列操作(仍在内存中),然后将其发送给客户端

这与您可以执行的方法类似
db.collection.find().sort()
;那里的排序只会更改返回给客户机的内容,而不会更改存储在数据库中的内容


唯一的例外是使用时,它会将聚合结果保存到另一个集合。您可以看到,因为他们必须添加一种特殊类型的stage来执行此操作,所以正常聚合不会写回存储的数据。

聚合管道不会更改原始数据;它所做的是获取数据的临时内存副本,并对其执行一系列操作(仍在内存中),然后将其发送给客户端

这与您可以执行的方法类似
db.collection.find().sort()
;那里的排序只会更改返回给客户机的内容,而不会更改存储在数据库中的内容


唯一的例外是使用时,它会将聚合结果保存到另一个集合。您可以看到,因为他们必须添加一种特殊类型的阶段来执行此操作,所以正常聚合不会回写存储的数据。

请添加更多详细信息。在这里查看如何提问:stackoverflow.com/help/how-to-askAs of MongoDB v3.6(当前版本)不会更改文档。您可能会发现stage很有用。请添加更多详细信息。在这里查看如何提问:stackoverflow.com/help/how-to-askAs of MongoDB v3.6(当前版本)不会更改文档。你可能会发现舞台很有用。
db.users.aggregate([{$addFields:{totalAge:{$sum:"$age"}}}]).forEach(function (x){
    db.users.save(x)
})