获取MongoDB中今天之前过期的文档

时间:2016-01-22 13:32:14

标签: mongodb mongodb-query

我正在使用 MongoDB 2.6 ,我正在创建一个按过期日期过滤文档的查询。我想知道今天之前哪些文件过期了。我的持久数据代表了出版物。

我已经提出了一些问题,但它没有返回文件。我知道有很多文件可以满足这种条件。

我尝试了两个查询,但没有人工作:

1

{
"domain.ApplicationCase.fields.ExpireDate": { $gte : {
 $currentDate: {
    lastModified: true,
    "cancellation.date": { $type: "timestamp" }
 }}}    
}

2

{
"domain.ApplicationCase.fields.ExpireDate": { $gte : new Date()}    
}

部分文件记录:

{
    "_id" : "1234546",
    "fields" : {
        "Orchestration" : "default",
        "Segmentation" : "PFI",
        "MatchKey" : "1",
        "UserID" : "001"
    },
    "domain" : {
        "ApplicationCase" : {
            "_id" : null,
            "fields" : {
                "ExpireDate" : "2015-11-13T13:47:26Z",
....

怎么了?

1 个答案:

答案 0 :(得分:1)

如果您想获取今天之前已过期的记录,那么您应该使用$lte代替$gte

db.myCollection.find({
  "domain.ApplicationCase.fields.ExpireDate": { $lte : new Date()}    
})

<强>更新

因此,您的文档的核心问题是,domain.ApplicationCase.fields.ExpireDate的值不是日期格式,而是简单的字符串格式。

因此,首先需要将它们转换为日期,以便查询能够正常工作,因为您要将字符串与日期进行比较。

也许你可以使用这样的代码将字符串转换为日期:

db.myCollection.find({
    "domain.ApplicationCase.fields.ExpireDate": {$exists: true}
}).snapshot().forEach(function(record) {
    var stringValue = record.domain.ApplicationCase.fields.ExpireDate;

    db.myCollection.update({_id: record._id}, {$set: {
          "domain.ApplicationCase.fields.ExpireDate": ISODate(stringValue)
    }});
})