mongodb - 带有日期比较的 Mongo $filter

标签 mongodb date mongodb-query aggregation-framework

我有以下聚合,它有一个日期比较,我只想获取 $$item.date 小于当前时间的文档。

[
    { $match : { "_id" : "57b4c5f0291ebb13110b888e" } },
    { $project : {
            "fulfillments" : {
                $filter : {
                    "input" : "$fulfillments",
                    "as" : "item",
                    "cond" : { "$gte" : ["$$item.date","new Date()"]}
                }
            }
        }
    },

    ...

    ...
]

我对上述问题的重要部分如下:

"cond": { "$gte": ["$$item.date","new Date()"]}

这似乎不起作用,因为我可以将 new Date() 更改为 10 或几乎任何值它仍然返回所有文件。我需要它只返回 date 大于或等于当前日期的文档。

例如,给定以下文件

{
  "_id": "57b4c5f0291ebb13110b888e",
  "fulfillments": [
    {
      "_id": "582deb33bb117300010a2ae5",
      "date": new Date("2016-11-23T17:00:00-0700"),
    },
    {
      "_id": "582deb33bdf17300010a2ae5",
      "date": new Date("2017-11-23T17:00:00-0700"),
    }
}

只应返回以下 fulfillment,因为它是 2017-11-23

    {
      "_id": "582deb33bdf17300010a2ae5",
      "date": new Date("2017-11-23T17:00:00-0700"),
    }

更新 我是否提供了准确的文档结构存在疑问,因此我在下面提供了一个屏幕截图来验证这一点。

enter image description here

最佳答案

如果你只想要机器上的当前时间,只需从查询中删除 ",请参见下面的示例

> db.test.find().pretty()
{
        "_id" : "57b4c5f0291ebb13110b888e",
        "fulfillments" : [
                {
                        "_id" : "582deb33bb117300010a2ae5",
                        "date" : ISODate("2016-11-24T00:00:00Z")
                },
                {
                        "_id" : "582deb33bdf17300010a2ae5",
                        "date" : ISODate("2017-11-24T00:00:00Z")
                }
        ]
}
>
> db.test.aggregate([
...     { $match : { "_id" : "57b4c5f0291ebb13110b888e" } },
...     { $project : {
...             "fulfillments" : {
...                 $filter : {
...                     "input" : "$fulfillments",
...                     "as" : "item",
...                     "cond" : { "$gte" : ["$$item.date",new Date()]}
...                 }
...             }
...         }
...     }
... ]).pretty()
{
        "_id" : "57b4c5f0291ebb13110b888e",
        "fulfillments" : [
                {
                        "_id" : "582deb33bdf17300010a2ae5",
                        "date" : ISODate("2017-11-24T00:00:00Z")
                }
        ]
}
>

关于mongodb - 带有日期比较的 Mongo $filter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41052012/

相关文章:

java - 如何通过键名从 mongoDB 中检索值?

java - spring mongorepository save 抛出重复键异常

python - MongoDB/PyMongo : Querying multiple criteria - unexpected results

mongodb - 如何使用聚合框架计算 MongoDB 中的 bool 值

Mysql,选择引用日期(weekofyear)的语句

javascript - moment.js 将毫秒转换为日语日期

php - Mysql 一个 Varchar 列的总和值,它以下列格式将日期保存为月份

node.js - 如何使用 Node.Js 在 MongoDB 中插入或更新数组?

Mongoose:根据另一个集合中的值过滤集合

mongodb 使用性能较低的索引