这是我的收藏:
{
"Id" : "001",
"Data":[{
"updatedTime" : 1483209005,
"value" : 35
},
{
"updatedTime" : 1483209005,
"value" : 20
}
]
}
这是我试过的:
db.A.aggregate([
{ "$group": {
"_id": "$Id",
"Difference": {
"$sum": {
"$cond": [
{ "$eq": [ "Data.$.value", 35.0 ] },
"$updatedTime",
{ "$cond": [
{ "$eq": [ "Data.$.value", 20.0 ] },
{ "$subtract": [ 0, "$updatedTime" ] },
0
]}
]
}
}
}}
])
但我得到这样的输出:
{
"_id" : "001",
"Difference" : 0.0
}
我需要找到数据阵列中两个updatedDate字段之间的差异我该怎么做?
答案 0 :(得分:1)
您需要使用$let
运算符将数组中的每个元素分配给变量,以便使用“点表示法”访问子文档字段,可以使用$subtract
和$abs
。要获取第一个和第二个元素,只需使用$arrayElemAt
运算符。
在“in”表达式中,您需要$subtract
这两个值并使用$abs
运算符返回绝对值。
db.collection.aggregate([
{ "$group": {
"_id": "$Id",
"Difference": {
"$sum": {
"$let": {
"vars": {
"first": { "$arrayElemAt": [ "$Data", 0 ] },
"second": { "$arrayElemAt": [ "$Data", 1 ] }
},
"in": {
"$abs": {
"$subtract": [
"$$first.updatedTime",
"$$second.updatedTime"
]
}
}
}
}
}
}}
])
答案 1 :(得分:-1)
正如你所说,它总是有两个元素,然后做这样的事情 -
datetime_created = models.DateTimeField(auto_now_add=True)
datetime_updated = models.DateTimeField(auto_now=True)