有点复杂,我是 Mongo 的新手,所以希望有人能提供帮助。我有一个用户数据库。每个用户都有一个列出的州/省。我正在尝试在每个州/省创建另一个总用户集合。因为用户注册的频率很高,所以我正在尝试生成并显示在 map 上的总数会不断增长。
我能够查询数据库以查找特定州的用户总数,但我想对所有用户执行此操作并得出所有州/省的总数列表,并在列出所有州/省的数据库和字段 TOTAL 将动态填充其他集合的计数查询。但我不确定如何让查询成为另一个集合中字段的结果。
使用它来获取用户总数:
db.users.aggregate([
{"$group" : {_id:"$state", count:{$sum:1}}}
])
我的主要问题是如何使查询结果成为另一个集合中每条对应记录中字段的值。或者如果这可能的话。
感谢任何帮助或指导。
最佳答案
看起来像那样On-Demand Materialized Views (刚刚添加到 MongoDB 4.2 版)应该可以解决您的问题!
您可以使用 $merge operator 创建按需实体化 View .
物化 View 的一个可能定义是:
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()
之后,您可以像普通集合一样查询 View ,使用 db.users_total.find()
或 db.users_total.aggregate()
。
关于mongodb - 如何用另一个集合的计数查询结果填充一个集合的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57775835/