#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.. опубликует код вставки … надеюсь, это поможет.