我正在使用 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",
....
怎么了?
答案 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)
}});
})