Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较mongodb中单个集合中的文档_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

比较mongodb中单个集合中的文档

比较mongodb中单个集合中的文档,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,以下名为“IgnitionData”的集合在mongodb中维护。这里我只展示文件的相关成员 data: {[ {"_id":1, "ignition": 0,"date" : ISODate("2014-03-01T09:00:00Z")}, {"_id":2, "ignition": 1,"date" : ISODate("2014-03-01T09:01:00Z")}, {"_id":3, "ignition": 1,"date" : ISODate("201

以下名为“IgnitionData”的集合在mongodb中维护。这里我只展示文件的相关成员

data: {[   
    {"_id":1, "ignition": 0,"date" : ISODate("2014-03-01T09:00:00Z")},
    {"_id":2, "ignition": 1,"date" : ISODate("2014-03-01T09:01:00Z")},
    {"_id":3, "ignition": 1,"date" : ISODate("2014-03-01T09:02:00Z")},
    {"_id":4, "ignition": 1,"date" : ISODate("2014-04-01T09:03:00Z")},
    {"_id":5, "ignition": 1,"date" : ISODate("2014-04-01T09:04:00Z")},
    {"_id":6, "ignition": 0,"date" : ISODate("2014-04-01T09:05:00Z")},
    {"_id":7, "ignition": 1,"date" : ISODate("2014-03-01T09:06:00Z")},
    {"_id":8, "ignition": 1,"date" : ISODate("2014-03-01T09:07:00Z")},
    {"_id":9, "ignition": 1,"date" : ISODate("2014-03-01T09:08:00Z")},
    {"_id":10, "ignition": 1,"date" : ISODate("2014-04-01T09:09:00Z")},
    {"_id":11, "ignition": 1,"date" : ISODate("2014-04-01T09:10:00Z")},
    {"_id":12, "ignition": 0,"date" : ISODate("2014-04-01T09:11:00Z")}
   }]
现在我需要生成一个报告,其中我只需要显示点火持续时间。我的输出应该如下所示

{
    {"_id":1, "StartTime": ISODate("2014-03-01T09:01:00Z"), "StopTime": ISODate("2014-03-01T09:04:00Z"), "totalDurationInMin" : 3},
    {"_id":2, "StartTime": ISODate("2014-03-01T09:06:00Z"), "StopTime": ISODate("2014-03-01T09:10:00Z"), "totalDurationInMin" : 4}
}
我可以获取任何列表变量的数据并运行循环。检查点火状态的转换(0到1和1到0)并计算总时间,但如果可能,使用mongodb查询运算符将非常有用。有时会有很多文档,所以使用变量将是代价高昂的操作

可能的方法

var mapFunction = function(){ for( var i = 0; i < this.data.length; i++){
                                if ((this.data[i].ignition == "0") && (this.data[i+1].ignition == "1"))
                                {emit({StartDate: this.data[i].date});}
                                if ((this.data[i].ignition == "1" ) && (this.data[i+1].ignition == "0"))
                                {emit({EndDate: this.data[i].date});}           
                            }};


 var reduceFunction = function(key, values) { return values[1] - values[0]};

db.runCommand(
               {
                 mapReduce: ignitionData,
                 map: mapFunction,
                 reduce: reduceFunction,
                 out: { merge: stoppageTime }
               }
             )
var-mapFunction=function(){for(var i=0;i

我仍然没有得到正确的答案。有人请帮忙。

我想你可以在收藏中尝试mongodb聚合。 首先根据id和日期对集合进行排序,然后应用分组逻辑。类似于此:

db.IgnitionData.aggregate(
[
{$sort:{点火:1,日期:1}},
{
$group:
{
_id:“$\u id”,
开始时间:{$first:$date},
停止时间:{$last:$date}
}
}
]

)
我认为您可以在集合上尝试mongodb聚合。 首先根据id和日期对集合进行排序,然后应用分组逻辑。类似于此:

db.IgnitionData.aggregate(
[
{$sort:{点火:1,日期:1}},
{
$group:
{
_id:“$\u id”,
开始时间:{$first:$date},
停止时间:{$last:$date}
}
}
]

)
大家好,欢迎来到Stack Overflow。我可以问你一个关于数据结构的问题吗?看起来点火数据子文档适合于,但您将它们包含在父文档中。这是故意的吗?对不起,文斯,这是错误的,那些是个人文件。或者,即使我有子文档,我也会使用$unwind并单独创建。好的,谢谢。你能回答这个问题吗?先把开头和结尾的括号去掉,说清楚一点?嗨,文斯,现在完成了。。我的请求有任何更新吗?你好,ManasP,欢迎来到Stack Overflow。我可以问你一个关于数据结构的问题吗?看起来点火数据子文档适合于,但您将它们包含在父文档中。这是故意的吗?对不起,文斯,这是错误的,那些是个人文件。或者,即使我有子文档,我也会使用$unwind并单独创建。好的,谢谢。你能回答这个问题吗?先把开头和结尾的括号去掉,说清楚一点?嗨,文斯,现在完成了。。我的请求有任何更新吗?我尝试了你的答案,但没有给出想要的答案。我需要一个查询,可以检测从0->1到1->0的转换。我想捕捉这些事件。然后扣除这两个事件之间的时间。我尝试了你的答案,但没有给出想要的答案。我需要一个查询,可以检测从0->1到1->0的转换。我想捕捉这些事件。然后扣除这两个事件之间的时间。