Я знаю, что это может звучать очень странно, но, пожалуйста, прочитайте весь случай.
У меня MongoDB версии 3.2.5, которая работает более года, сегодня я запустил простой запрос к коллекции:
db.collection_name.find({chkst:0},{chkst:1});
Насколько мне известно, ответом должен был быть документ с полем chkst
, равным 0 и _id
с ObjectID
документа.Тем не менее, ответ был:
{
"_id" : ObjectId("5fe7f8c08cdc06066edb5258"),
"chkst" : NumberInt(1)
}
Обратите внимание на значение chkst
?Я знаю, что это невозможно.Вот картинка из Studio3T, потому что раньше я чувствовал, что у RoboMongo может быть какая-то проблема!
![MongoDB Find incorrect results](https://i.stack.imgur.com/snan4.png)
Как я уже сказал, это странный случай, и я мог быне первым, кто столкнется с этим, но я столкнулся с такой проблемой впервые за 4 года с MongoDB!
Еще один момент, который я хотел бы добавить, Агрегирование в той же коллекции вв то же время дает правильные результаты.
db.collection_name.aggregate([
{"$group": {"_id": "$chkst", "count": {"$sum": 1}}}
]);
Это дало ожидаемый результат!Как и в случае НЕТ проблем с агрегацией, но поиск приводит к неожиданным результатам.
Любая помощь или объяснение было бы здорово!
Обновление
После небольшого сеанса быстрого мышленияЯ заметил, что поле было проиндексировано!Поэтому я просто удалил индекс и добавил его снова.
ВОЙЛА!Проблема решена! .Может быть, update.writeErrors.index
выдал ошибку во время обновления или напишите об этом поле, и это не было обработано!Есть ли способ контролировать сбой записи индекса?У меня MongoDB Ops Manager, развернутый для управления 4-мя сегментированными кластерами, хотя этот автономный.Я не могу выдвинуть это как ответ, пока я не уверен на 100%, что это - причина.