Как создать запрос с ObjectIds с помощью java?

У меня есть набор идентификаторов, например:

["51eae104c2e6b6c222ec3432", "51eae104c2e6b6c222ec3432", "51eae104c2e6b6c222ec3432"]

Мне нужно найти все документы, используя этот набор идентификаторов.

    BasicDBObject query = new BasicDBObject(); 
    BasicDBList list = new BasicDBList();
    ObjectId ob1 = new ObjectId("51eae100c2e6b6c222ec3431");
    ObjectId ob2 = new ObjectId("51eae100c2e6b6c222ec3432");
    list.add(ob1);
    list.add(ob2);
    query.append("_id", new BasicDBObject("$in", list));

Этот запрос ничего не может найти, потому что он такой же, как

{ "_id" : { "$in" : [ { "$oid" : "51eae100c2e6b6c222ec3431"} , { "$oid" : "51eae100c2e6b6c222ec3432"}]}}

Чтобы найти что-то, это должно быть

{_id:{$in:[ObjectId("51eae100c2e6b6c222ec3431") , ObjectId("51eae104c2e6b6c222ec3432")]}}

но я не знаю, как сделать ObjectId("51eae100c2e6b6c222ec3431") в списке с помощью java


person Guru_1010    schedule 21.07.2013    source источник


Ответы (1)


{ "$oid" : "51eae100c2e6b6c222ec3431"} это то же самое, что и ObjectId("51eae100c2e6b6c222ec3431") только в другом формате.

См. эту страницу для различных форматов: http://docs.mongodb.org/manual/reference/mongodb-extended-json/

Если запрос не находит никаких документов (а вы уверены, что они есть в коллекции), то проблема в другом. Я бы сначала дважды проверил серверы, к которым вы подключаетесь, а также имя базы данных и коллекции.

Роб.

person Rob Moore    schedule 21.07.2013
comment
Я только что проверил из оболочки монго, этот запрос {_id:{$in:[ { $oid : 51ebf50bc2e66fa145ddaa30} , { $oid : 51ebf510c2e66fa145ddaa31}]}} ничего не возвращает, хотя документы с этими oids представлены в коллекции - person Guru_1010; 21.07.2013
comment
Формат режима оболочки — ObjectId(51eae100c2e6b6c222ec3431). Утилита JSON драйвера Java преобразует ObjectId в строгий формат { $oid : 51eae100c2e6b6c222ec3431}. Работает ли запрос с Java? - person Rob Moore; 21.07.2013
comment
Да, это работает из java. Спасибо. Но другая проблема в том, что запрос возвращает только один документ вместо двух. - person Guru_1010; 21.07.2013
comment
Который из? Ява или Шелл? Если Java, вы можете отредактировать вопрос, указав, как выглядит код для выполнения запроса и использования результатов? - person Rob Moore; 21.07.2013
comment
Он не показывает, как вы выполняете запрос. Просто создайте документ запроса. - person Rob Moore; 21.07.2013
comment
Я сделал db.collection.find(query);, где коллекция — это название моей коллекции. - person Guru_1010; 22.07.2013