2016-01-22 4 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()}  
}) 

Update:

Так основная проблема с документами является то, что , значение domain.ApplicationCase.fields.ExpireDate не в формате даты, а в простом формате String.

Итак, сначала нужно преобразовать их в дату, чтобы запрос работал, поскольку вы сравниваете строку с датой.

Возможно, вы можете использовать такой код, чтобы преобразовать строку в дату:

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

Смежные вопросы