我想在mongodb中使用$ group获取包含所有字段的记录。 即:SELECT * FROM users GROUP BY状态,mongodb中的等效查询。 任何人都可以帮助我。
答案 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
中的数组。
但是,无论采用何种方法,您都应该尽量避免在制作中出现此类查询。它们适用于罕见的请求,例如分析,数据库迁移或每日脚本,但不适用于频繁的请求。