Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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_Aggregation Framework - Fatal编程技术网

mongodb对日期时间键的聚合

mongodb对日期时间键的聚合,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我的文档包括login\u time和logout\u time,我在其上设置了聚合,如下所示: db.connection_log.aggregate([{'$match':{“注销时间”:“2014-05-12 05:45:19”}), {'$group':{''RUID':{'RASUID':'$RASUID'},'total': {'$sum':{'$subtract':[“$ISODate(注销时间)”,“$ISODate(登录时间)”]} 我在文件中的数据: {u id':Obje

我的文档包括
login\u time
logout\u time
,我在其上设置了聚合,如下所示:

db.connection_log.aggregate([{'$match':{“注销时间”:“2014-05-12 05:45:19”}),
{'$group':{''RUID':{'RASUID':'$RASUID'},'total':
{'$sum':{'$subtract':[“$ISODate(注销时间)”,“$ISODate(登录时间)”]}
我在文件中的数据:

{u id':ObjectId('5370982F1abf80c21a3dd51'),
“_类型”:1,
“来电者id”:“,
“已使用信用证”:0,
'details':{'ip_赋值]:false,
'kill_reason':'kill by admin system',
“mac”:“,
"持久":对,,
“用户id”:NumberLong(805)},
“登录时间”:“2014-05-1205:44:37”,
“注销时间”:“2014-05-1205:45:19”,
“ras_id”:1,
“重试计数”:1,
“成功”:没错,
'type_details':{'in_bytes':0,'out_bytes':0,'remote_ip':'10.0.0.1/32'},
'unique_id':'remote_ip',
“唯一id值”:“10.0.0.1/32”,
“用户id”:数字长(805),
“用户名”:“阿里”}
但这对我不起作用。 如何计算我提交的日期?
请帮帮我。

这里的最大问题是,您的“日期”实际上是字符串。您需要将它们改为日期类型。因此,以JavaScript外壳形式编写脚本来修复:

db.connection\u log.find({},{“login\u time”:1,“logout\u time”:1}).forEach(
功能(doc){
db.connection\u log.update(
{u id:doc.\u id},
{
“$set”:{
“登录时间”:新的ISODate(文件[“登录时间]),
“注销时间”:新的ISODate(文件[“注销时间”])
}
}
);
}
)
然后您就可以正确地聚合:

db.connection\u log.aggregate([
{$match:{“注销时间”:ISODate(“2014-05-1205:45:19”)},
{“$组”:{
“_id”:“$ras_id”,
“总数”:{
“$sum”:{
“$subtract”:[
“$logout_time”,
“$login\u time”
]
}
}
}}
])
所以这实际上会给你们一个结果,它被抽象为两个时间之间的“毫秒”的历元时间戳值差,这是一个整数


另请参阅更新您的收藏的有效方法。

我觉得这些看起来像字符串。您需要首先将它们转换为正确的日期类型。并修复将它们作为字符串插入的代码。非常感谢。我可以更新我的字段吗?例如sql中的alter命令?@user3676300,正如我给出的另一个被引用的答案所说,没有MongoDB中的显示方式,在执行更新时引用字段的现有值。例外情况是像
$inc
这样的运算符,但所有这些都会增加值。您需要
.find()
并修改。阅读该答案,其中有一些很好的信息。其他人从up投票中清楚地认为是这样:)@user3676300除了关于如何更正现有数据的好建议之外,您在这里还有一个正确的聚合语句。大多数人会发现这非常有用:)祝您努力顺利。@user3676300很抱歉e大量的注释,但这也是一个重要的注释。您提到的SQL的“ALTER”命令是一个DDL语句,旨在修改“Schema”。MongoDB是“无Schema”的,因此从“Schema modification”的角度来看,没有“this field contains a
Date
type”的概念。实际上,您需要更改“type”因为没有办法“改变模式”,如行为良好的SQL引擎所能做到的那样do@user3676300实际上,你可以通过接受给出的答案来表示感谢,这是做事情的最佳方式:)