我可以在MongoDB中聚合具有已知顺序的无字段数组吗?
我可以使用聚合框架重新格式化包含“未命名”项的数组结果集吗我可以在MongoDB中聚合具有已知顺序的无字段数组吗?,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我可以使用聚合框架重新格式化包含“未命名”项的数组结果集吗 db.results.find(); { _id: '...', headers: ['date', 'field1', 'field2'], rows: [ // Always in the same order as specified in headers above ['2014-01-01', 'some string', 5.1], ['2014-01-02', 'some string'
db.results.find();
{
_id: '...',
headers: ['date', 'field1', 'field2'],
rows: [
// Always in the same order as specified in headers above
['2014-01-01', 'some string', 5.1],
['2014-01-02', 'some string', 4.9],
['2014-01-03', 'yet a string', 1.2],
...
]
}
即使在实际的行
数组中没有命名,我是否可以将其转换为一个按其中一个字段分组汇总的结果
预期结果:
[
{ _id: '...', field1: 'some string', field2: 10 },
{ _id: '...', field1: 'yet a string', field2: 1.2 }
]
映射
现在聚合管道不可能实现这一点,但可以使用mapReduce实现这一点。首先定义映射器:
var映射器=函数(){
var headers=this.headers,
新行=[];
this.rows.forEach(函数(行){
var obj={};
对于(var i=0;i可能。是的。但只是不了解您的用例。您是否希望以某种方式对记录中给定数组的每个n
元素进行单独求和?这可能需要对您的问题进行一些解释。@NeilLunn谢谢。我试着澄清我真正想要的内容。嗨,Neil,谢谢您的帮助。我想您是对的正确的路径。如果我在Chrome控制台中运行它,它会完美地工作。但是在MongoDB中,我的结果如下:{u id:'xyz',value:[{'[object]':value},{…},…]}
。由于某种原因,value是每行N-3:rd字段的值。@DavidAndersson。是的,mapReduce输出非常奇怪。但是你在哪里运行这个?控制台?使用meteor?和另一个后端。meteor或plain node?JSON.stringify以获得对象的更好表示。这就是“value”中的内容字段。我的目的是为了一个Meteor应用程序,但我的评论中的结果来自Robomongo控制台。我的评论的意思是,在Chrome控制台中的普通JS对象上运行会产生所需的结果,但在Mongo中不会。如果此输出正确(我觉得不正确),我将如何汇总?@DavidAndersson很抱歉,我完全错过了你问题的这一部分。有几种方法。你到底想通过什么进行汇总?我想你希望通过\u id
和日期对字段的值进行汇总。对吗?@DavidAndersson我认为这些选项是c现在吃多了,希望这能解释一切。