Поиск в диапазоне MongoDB по числам работает не так, как ожидалось

#java #mongodb #numbers #find

#java #mongodb #числа #Найти

Вопрос:

Я пытаюсь выполнить поиск по диапазону для некоторых чисел в MongoDB.

У меня есть следующие две записи. Поля импорта — это последние два, value и type . Я хочу иметь возможность возвращать записи, которые имеют значение: в пределах некоторого диапазона.

 { "_id" : ObjectId("4eace8570364cc13b7cfa59b"), "sub_id" : -1630181078, "sub_uri" : "http://datetest.com/datetest", "pro_id" : -1630181078, "pro_uri" : "http://datetest.com/datetest", "type" : "number", "value" : "8969.0" }
{ "_id" : ObjectId("4eacef7303642d3d1adcbdaf"), "sub_id" : -1630181078, "sub_uri" : "http://datetest.com/datetest", "pro_id" : -1630181078, "pro_uri" : "http://datetest.com/datetest", "type" : "number", "value" : "3423.0" }
 

Когда я выполняю этот запрос

 > db.triples.find({"value":{$gte: 908}});
 

Итак, я выполняю этот запрос:

 > db.triples.find({"value":{$gte: "908"}});
 

И снова ни одна из двух ожидаемых записей не возвращается (хотя в этом случае возвращается какая-то другая запись, содержащая дату).

Я ожидаю получить две записи выше, но ни одна из них не отображается.

Я вижу, что вокруг чисел есть кавычки — означает ли это, что они хранятся как «Строки», и поэтому числовой поиск не работает? Я очень явно сохранил их как a Double , отсюда и появляется «.0».

Или может быть какая-то другая причина, по которой команда find(… query …) работает не так, как ожидалось?

Редактировать:

Код вставки выглядит следующим образом (удалена обработка исключений):

t.GetObject().GetValue() возвращает строку — это работает нормально. Затем я использую это для создания экземпляра Double, который, как я надеялся, будет сохранен в MongoDB и разрешит поиск в числовом диапазоне.

 triple.put("value",new Double(t.getObject().getValue()));
DBCollection triples;
triples = db.getCollection("triples");
triples.update(triple,triple,true,false); 
 

Ответ №1:

Вы правы — они сохраняются в виде строк, и $ gte предположительно будет использовать лексикографический порядок. Какой драйвер MongoDB вы используете? Как именно вы вставляете эти записи?

Комментарии:

1. Использование драйвера Java.. опубликует код вставки … надеюсь, это поможет.