【问题标题】:Aggregate in mongoDB在 mongoDB 中聚合
【发布时间】:2017-06-23 22:33:50
【问题描述】:

我确实看过很多代码示例,但我从来没有找到我想要的东西。实际上我可以做一个循环,但我真的更喜欢使用 mongo 引擎来获得我想要的结果。更疯狂的是,我开始花大量时间在它上面,而且看起来很基础......

我正在使用带有 Express 和 MongoDB 的 nodeJS 运行。

基本上我有一个包含一些信息的集合,例如:

{
  "aqi": 149,
  "area": "AL",
  "position_name": "montgomery",
  "station_code": "1793A",
},
{
  "aqi": 162,
  "area": "AL",
  "position_name": "huntsville",
  "station_code": "1790A",
},
{
  "aqi": 73,
  "area": "TX",
  "position_name": "dallas",
  "station_code": "1792A",
}

我想得到一个类似的结果数据集

{
  "_id": "AL",
  "positions": [
    {
      "position_name": "montgomery",
      "station_code": "1793A"
    },
    {
      "position_name": "huntsville"
      "station_code": "1790A"
    }
  ]
},
{
  "_id": "TX",
  "positions": [
    {
      "position_name": "dallas",
      "station_code": "1793A"
    }
  ]
}

到目前为止,我真的认为我确实检查了整个stackoverflow并尝试了几种解决方案,同时如果我错了并且已经存在类似问题的问题,请告诉我,我提前道歉。

我当前的代码:

db.collection('cities', function(err, collection) {
  collection.aggregate([{$group : {_id : "$area"}}], function(err, items) {
    res.send(items);
  });
});

我正在考虑混合匹配(区域)和组,但直到现在都没有成功。

感谢您的帮助。

编辑:

我确实忘记了组操作员来执行此操作。这里是新代码:

db.collection('cities', function(err, collection) {    
  collection.aggregate([{$group : {_id: "$area", positions: {$push : "$position_name"}}}], function(err, items) {
    res.send(items);
  });
});

【问题讨论】:

    标签: node.js mongodb aggregation-framework


    【解决方案1】:

    我认为您首先需要接受这是一个 aggregation pipeline 并且要考虑的重要事情就像从一个 shell 命令到另一个 shell 命令的管道结果一样,这就是您在聚合中所做的事情。

    所以你开始了,但你需要更多的步骤。如果不用勺子喂食,我只会说看看 $push 运算符,它应该会为您指明正确的方向。

    还可以尝试花一些时间浏览给出的运算符和教程示例。

    http://docs.mongodb.org/manual/reference/operator/aggregation/

    http://docs.mongodb.org/manual/tutorial/aggregation-zip-code-data-set/

    【讨论】:

    • 实际上是推...
    猜你喜欢
    • 2017-09-03
    • 2021-11-20
    • 2012-05-10
    • 2017-10-24
    • 1970-01-01
    • 2017-05-05
    • 2019-09-28
    • 1970-01-01
    相关资源
    最近更新 更多