Как создать запрос с 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

1 ответ

Решение

{ "$oid" : "51eae100c2e6b6c222ec3431"} такой же как ObjectId("51eae100c2e6b6c222ec3431") просто в другом формате.

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

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

Роб.

Другие вопросы по тегам