如何用另一个集合的计数查询结果填充一个集合的字段?

时间:2019-09-03 16:47:54

标签: mongodb

这里很复杂,我对Mongo还是很陌生,所以希望有人可以提供帮助。我有一个用户数据库。每个用户都有列出的州/省。我正在尝试创建每个州/省的用户总数的另一个集合。由于用户定期注册,因此我要在地图上生成并显示的总数将会不断增长。

我能够查询数据库以查找处于特定状态的用户总数,但是我想为所有用户执行此操作,并列出所有州/省的总数列表,并在其中具有单独的集合列出所有州/省的DB,并使用其他集合的count查询动态填充字段TOTAL。但是我不确定如何使查询成为另一个集合中某个字段的结果。

使用它来获取用户总数:

db.users.aggregate([
    {"$group" : {_id:"$state", count:{$sum:1}}}
])

我的主要问题是如何使查询结果成为另一个集合中每个对应记录中字段的值。或者甚至有可能。

感谢您的帮助或指导。

1 个答案:

答案 0 :(得分:0)

看起来On-Demand Materialized Views(仅在MongoDB 4.2版中添加)应该可以解决您的问题!

您可以使用$merge operator创建按需实例化视图。

实例化视图的可能定义为:

updateUsersLocationTotal = function() {
   db.users.aggregate( [
      { $match: { <if you need to perform a match, like $state, otherwise remove it> } },
      { $group: { _id:"$state", users_quantity: { $sum: 1} } },
      { $merge: { into: "users_total", whenMatched: "replace" } }
   ] );
};

然后您只需调用updateUsersLocationTotal()

即可执行更新

之后,您可以使用db.users_total.find()db.users_total.aggregate()像普通集合一样查询视图。