проблема mongoDB (или нет) при использовании $lte и $gte с тем же значением запрос не возвращает никакого значения

позвольте мне привести вам пример:

mongos> db.test.insert( { a: 0.1, b: 1, c : 0.01 } )
mongos> db.test.insert( { a: 0.2, b: 2, c : 0.02 } )
mongos> db.test.insert( { a: 0.3, b: 3, c : 0.03 } )
mongos> db.test.find()
{ "_id" : ObjectId("5225e072dd144e45bf406d42"), "a" : 0.1, "b" : 1, "c" : 0.01 }
{ "_id" : ObjectId("5225e07add144e45bf406d43"), "a" : 0.2, "b" : 2, "c" : 0.02 }
{ "_id" : ObjectId("5225e082dd144e45bf406d44"), "a" : 0.3, "b" : 3, "c" : 0.03 }
mongos> db.listings.find({a: { $gte: 0.2, $lte: 0.2 } } );
mongos> db.listings.count({a: { $gte: 0.2, $lte: 0.2 } } );
0

Как вы можете видеть, даже если документ существует в коллекции, запрос не возвращает никакого результата. Я знаю, что это wierd использовать range search для простого равного, но, на мой взгляд, это должно работать и возвращать ожидаемый документ. Спасибо за ответ.

забыл упомянуть, что версия mongoDB-2.4.4-pre -.

1 ответов


проблема в том, что вы вставили данные в тестовую коллекцию, но выполнили запрос на коллекцию списков. Если вы запрашиваете тестовую коллекцию, все работает так, как ожидалось:

> db.test.insert( { a: 0.1, b: 1, c : 0.01 } )
> db.test.insert( { a: 0.2, b: 2, c : 0.02 } )
> db.test.insert( { a: 0.3, b: 3, c : 0.03 } )

> db.test.count({a: { $gte: 0.2, $lte: 0.2 } } )
1
> db.test.find({a: { $gte: 0.2, $lte: 0.2 } } );
{ "_id" : ObjectId("5225ecd155feffaf74591328"), "a" : 0.2, "b" : 2, "c" : 0.02 }