尝试此solution后又进一步了,我还有一个关于mongodb的问题。按地图排序/按内联结果排序
我的问题是:
我如何可以排序的输出:
doc = {_id : 16, days : { 1 : 123, 2 : 129, 3 : 140, 4 : 56, 5 : 57, 6 : 69, 7 : 80 }};
db.so.insert(doc);
map = function() {
emit(this._id, this.days["1"]);
emit(this._id, this.days["3"]);
emit(this._id, this.days["7"]);
}
reduce = function (k, vals) {
var sum = 0;
vals.forEach(function (v) {sum += v;});
return sum;
}
res = db.so.mapReduce(map, reduce, {out : {inline : 1}});
res.find();
输出是这样的:
"results" : [
{
"_id" : 16,
"value" : 225
},
{
"_id" : 33,
"value" : 230
},
{
"_id" : 302,
"value" : 274
}
]
现在我想排序结果如下:
res.find().sort({ "results.value":-1 });
导致这个错误:
Sat Mar 31 01:15:45 TypeError: res.find().sort({'results.value':-1}) is not a function (shell):1
是否有人能帮助我吗?
你认为这将有可能与新的mongo聚合框架? – MadeOfSport 2012-03-31 11:04:27
是的,我相信你可以用聚合框架来做到这一点。看起来像'$ project'这个'_id'和'sum',然后使用'$ sort'。这应该很容易测试,因为2.1可以下载。 – 2012-04-01 06:29:18
你说得对。这很好 – MadeOfSport 2012-04-01 10:59:25