對於第二個查詢,您需要使用MapReduce,它可以得到一個大毛茸茸的。這將工作:
map = function() {
for (var i = 0, j = this.actions.length; i < j; i++) {
emit(this.actions[i].time, this.actions[i].action);
}
}
reduce = function(key, value_array) {
var array = [];
for (var i = 0, j = value_array.length; i < j; i++) {
if (value_array[i]['actions']) {
array = array.concat(value_array[i]['actions']);
} else {
array.push(value_array[i]);
}
}
return ({ actions: array });
}
res = db.test.mapReduce(map, reduce)
db[res.result].find()
這將返回這樣的事情,在_id
鍵是你的時間戳:
{ "_id" : 123, "value" : { "actions" : [ "jump" ] } }
{ "_id" : 125, "value" : { "actions" : [ "neigh", "canter" ] } }
{ "_id" : 127, "value" : { "actions" : [ "whinny" ] } }
不幸的是,蒙戈目前不支持從減少函數返回一個數組,從而需要愚蠢的{actions: [...]}
語法。
哇,謝謝Emily!感謝您指點我這個方向,並感謝MapReduce功能!我現在就在上面! =) – RadiantHex 2010-07-26 21:59:04