【问题标题】:Mongo $filter with date comparisonMongo $filter 与日期比较
【发布时间】:2016-12-09 02:04:28
【问题描述】:

我有以下聚合,其中有一个日期比较,我只想获取 $$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"),
    }

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

【问题讨论】:

  • 我认为新日期周围的引号是问题所在。
  • @Veeram 当我尝试不带引号时,至少在 IDE 和 golang 中,它是必需的。
  • 去掉new Date()周围的引号:{ "$gte" : ["$$item.date", new Date()]}
  • @Styvane - 我试过在没有的情况下运行,但它不起作用。
  • @TheJediCowboy 你用 开始你的问题...获取 $$item.date 小于当前时间的文档 然后稍后在同一个问题中说 ...我只需要它返回日期大于或等于当前日期的文档您的真正意图是什么?我确定你做错了什么。

标签: mongodb date mongodb-query aggregation-framework


【解决方案1】:

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

> 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")
                }
        ]
}
>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 2011-04-10
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多