我想在 mongodb 中使用 $group 获取所有字段的记录。即:SELECT * FROM users GROUP BY 状态,mongodb 中的等效查询。谁能帮我。
问问题
97 次
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 回答