MongoDB-在日期时间仅使用$ lte小时

时间:2018-08-02 13:31:21

标签: mongodb aggregation-framework

我的数据如下:

/* 1 */
{
    "_id" : ObjectId("5b62f97e3c2094eefa912aba"),
    "FietsID" : 1267,
    "Stad" : "Antwerpen",
    "Accelerometer" : 1.0,
    "Decibel" : null,
    "Datum" : ISODate("2017-06-06T05:45:06.000Z"),
    "Location" : {
        "type" : "Point",
        "coordinates" : [ 
            22.50891, 
            48.54121
        ]
    }
}

/* 2 */
{
    "_id" : ObjectId("5b62f97e3c2094eefa9128cc"),
    "FietsID" : 1971,
    "Stad" : "Antwerpen",
    "Accelerometer" : 1.0,
    "Decibel" : 55,
    "Datum" : ISODate("2017-06-11T18:17:21.000Z"),
    "Location" : {
        "type" : "Point",
        "coordinates" : [ 
            -38.23146, 
            -6.75194
        ]
    }
}

我想获取时间小于06:00:00,分贝大于90且仅“稳定”仅安特卫普的所有数据

我尝试使用汇总$dateToString,但似乎我只能使用1个参数进行匹配。

1 个答案:

答案 0 :(得分:2)

您可以使用3.6中可用的$expr运算符在查找查询中使用聚合运算符,并使用$and包括所有条件。

使用$hour获取从日期开始的小时数。

类似

db.colname.find
({"$expr":{
  "$and":[
    {"$lte":[{"$hour":"$Datum"},6]},
    {"$gt":["$Decibel",90]},
    {"$gt":["$Stad","Antwerpen"]}
  ]
}})