javascript - 具有查找功能的 mongodb 聚合

标签 javascript node.js mongodb

我有一个与此类似的模型:

{
  email: String,
  name: String,
  role: String,
  location: {
    country: String,
    city: String
  },
  contacts: {
    email: String,
    phone: String
  }
}

我需要在 View 中显示完整的用户信息,但我还希望包括来自某个国家/地区的用户数量。

使用aggregate我不知道如何让完整用户访问我创建的组。

所以目前我正在做的是:

User.find({}, function(err, users) {
  User.aggregate([
    { $group: { _id: { country: '$location.country' }, count: { $sum: 1 }}}
  ], function(err, results) {
    res.render('home', {
      users: users,
      countries: results
    });
  });
});

如您所见,我正在使用“查找”,然后聚合来获取我需要的信息...但我很确定有一种方法可以仅使用“聚合”来获取它,但我找不到如何做到这一点...

最佳答案

如果您需要累积每个组的完整用户信息,那么您需要使用$push累加运算符和 $$ROOT系统变量来访问整个用户信息。

User.aggregate([
{$group:{"_id":{"country":"$location.country"},
         "users":{$push:"$$ROOT"},
         "count":{$sum:1}}}
],callback)

如果您只想累积用户信息文档的特定字段,您可以只推送所需的字段,例如:

User.aggregate([
{$group:{"_id":{"country":"$location.country"},
         "users":{$push:{"email":"$email","name":"$name"}},
         "count":{$sum:1}}}
],callback)

关于javascript - 具有查找功能的 mongodb 聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27732587/

相关文章:

Javascript使用php中的switch case从mysql数据库检索数据

javascript - 网页底部导航

mongodb - 文档数据库设计 : Multi-level categories (MongoDB specifically)

node.js - 复合服务器 8888 失败并显示 "failed to connect to [localhost:27017]"

javascript - 如何使用 node.js 和 bash 脚本运行 javascript 文件?

javascript - 如何通过对象 ID 访问其他属性值?

java - 无法连接到 mongo 容器

javascript - Socket.io 触发两个 node.js 应用程序之间的事件?

javascript - 在力有向图中突出显示节点及其邻居节点

node.js - Jenkins - NPM 更新失败