2016-01-22 56 views
2

今天之前到期的文件我使用MongoDB的2.6,我正在做一個查詢,過期的日期來過濾的文件。我想知道哪些文件在今天之前過期。我堅持的數據代表出版物。獲取其在MongoDB中

我做了一些疑問,但它不返回文檔。我知道有很多文件可以滿足這個條件。

我嘗試了兩種查詢,但沒有一個人的工作原理:

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", 
.... 

有什麼不對?

+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) 
    }}); 
}) 
+0

我敢肯定,EXPIREDATE使用ISoDate格式,它應該工作 – cheloncio

+0

但是,您粘貼的例子所示:' 「EXPIREDATE」: 「2015-11-13T13:47:26Z」,而不是'應該是' 「EXPIREDATE」:ISODate( 「2015-11-13T13:47:26Z」),' –

+0

我得到''未捕獲的異常:無效的ISO日期'' – cheloncio