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

标签 mongodb

有点复杂,我是 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/

相关文章:

javascript - Angular-meteor 用户集合仅返回 1 个对象

javascript - 获取 $group by 之后的最新文档

mongodb - 用 Go 编写的程序打开许多与 mongoDB 的连接

javascript - 使用变量获取位置然后修改mongodb中的特定对象

java - Spring Data MongoDB - 如果 DbRef 字段不存在,则添加到数据库

node.js - 多语言 NodeJs API

javascript - mongoDB:使用父引用查找模型树结构中丢失的文档

python - 使用 PyMongo 将 NumPy rec.array 插入 MongoDB

java - 使用 Java 和 MongoDB 进行参数化查询

mongodb - 如何在 spring-data mongodb 中将 updateOption 与 arrayFilters 一起使用?