如何使用$ group从mongodb获取总记录字段?

时间:2013-09-10 07:42:31

标签: mongodb

我想在mongodb中使用$ group获取包含所有字段的记录。 即:SELECT * FROM users GROUP BY状态,mongodb中的等效查询。 任何人都可以帮助我。

2 个答案:

答案 0 :(得分:0)

AFAIK无法在组查询中返回所有对象。您可以使用$addToSet运算符将字段添加到数组中以返回。示例代码如下所示。您可以使用addToSet运算符将所有字段添加到数组中。它将返回数组作为响应,您应该从这些数组中获取数据。

db.users.aggregate({$group : {_id : "$state", id : {$addToSet : "$_id"}, field1 : {$addToSet : "$field1"}}});

答案 1 :(得分:0)

您可以使用MapReduce来代替:

db.runCommand({
  mapreduce: 'tests',
  map: function() {
    return emit(this.state, { docs: [this] });
  },
  reduce: function(key, vals) {
    var res = vals.pop();
    vals.forEach(function(val) {
      [].push.apply(res.docs, val.docs);
    });
    return res;
  },
  finalize: function(key, reducedValue) {
    return reducedValue.docs;
  },
  out: { inline: 1 }
})

我在我的示例中使用finalize函数,因为MapReduce不支持reducedValue中的数组。

但是,无论采用何种方法,您都应该尽量避免在制作中出现此类查询。它们适用于罕见的请求,例如分析,数据库迁移或每日脚本,但不适用于频繁的请求。