0

我想在 mongodb 中使用 $group 获取所有字段的记录。即:SELECT * FROM users GROUP BY 状态,mongodb 中的等效查询。谁能帮我。

4

2 回答 2

0

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

db.users.aggregate({$group : {_id : "$state", id : {$addToSet : "$_id"}, field1 : {$addToSet : "$field1"}}});
于 2013-09-10T08:56:06.217 回答
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.

但是,无论采用哪种方法,您都应该尽量避免在产品中进行此类查询。它们适用于罕见的请求,例如分析、数据库迁移或日常脚本,但不适用于频繁的请求。

于 2013-09-10T10:48:55.507 回答