选择Mongodb中“日期”月份为12月的所有地方?

时间:2017-02-28 15:15:59

标签: mongodb meteor mongodb-query aggregation-framework

您知道我findAll月份是{12}月的Date吗?

我尝试了这个请求,但这并不好:

db.myCollection.aggregate({}, { "Date": { $month: 12 } });

它类似于SELECT * FROM table WHERE Months(date)=december

3 个答案:

答案 0 :(得分:2)

考虑运行使用 $redact 运算符的汇总管道,因为它允许您合并一个管道,功能 $project 创建表示日期字段月份的字段,并使用 $match 过滤文档 符合当月12月的特定条件。

在上面, $redact 使用 $cond tenary运算符作为提供条件表达式的方法,该表达式将创建系统变量新版本。 $cond 中的逻辑表达式将会检查 对于具有给定值的日期运算符字段的相等性,如果匹配则 $redact 将使用 $$KEEP 系统变量返回文档,否则使用 $$PRUNE 弃掉。

运行以下管道应该可以获得所需的结果:

db.myCollection.aggregate([
    {
        "$redact": {
            "$cond": [
                { "$eq": [{ "$month": "$Date" }, 12] },
                "$$KEEP",
                "$$PRUNE"
            ]
        }
    }
])

这类似于 $project + $match 组合,但您需要选择所有剩余的字段进入管道:

db.myCollection.aggregate([
    {
        "$project": {
            "month": { "$month": "$Date" },
            "field1": 1,
            "field2": 1,
            .....
        }
    },
    { "$match": { "month": 12 } }
])

使用 find() 方法和 $where 作为另一种选择,尽管查询速度慢:

db.myCollection.find({ "$where": "this.Date.getMonth() === 11" })

答案 1 :(得分:0)

这应该适用于在特定年份的12月查找记录,如果这足以满足您的目的。

db.myCollection.find({
    "Date":{
        $gte:new Date("2016-12-01T00:00:00Z"),
        $lt:new Date("2017-01-01T00:00:00Z")
}})

答案 2 :(得分:0)

db.collection(' mycollection')。find({" Date":{$ month:12}})

https://docs.mongodb.com/manual/reference/method/db.collection.find/