Ответ 1
Решил его, используя запрос as-
query.putAll((BSONObject)query);
Я пытаюсь найти документы в MongoDB, выполнив поиск по клавише "_id". Мой документ выглядит так:
{
"_id" : ObjectId("4f693d40e4b04cde19f17205"),
"hostname" : "hostnameGoesHere",
"OSType" : "OSTypeGoesHere"
}
Я пытаюсь выполнить поиск этого документа как
ObjectId id= new ObjectId("4f693d40e4b04cde19f17205");
BasicDBObject obj = new BasicDBObject();
obj.append("_id", id);
BasicDBObject query = new BasicDBObject();
query.putAll(query);
Но я получаю ниже error-
error: reference to putAll is ambiguous, both method putAll(Map) in BasicBSONObject and method putAll(BSONObject) in BasicBSONObject match
query.putAll(query);
Метод append для BasicDBObject поддерживает (String Key, Value), и если я передаю этот метод в качестве String, то никакие документы не будут сопоставлены.
Итак, мой вопрос: как передать "_id"?
Решил его, используя запрос as-
query.putAll((BSONObject)query);
Не уверен, что другие могут искать ответы на эту тему, но вот самый простой способ поиска записи MongoDB на основе "_id". Документация MongoDB не обновляется и по-прежнему показывает ObjectId как часть пакета com.mongodb
(он также, как правило, не дает много информации о поиске ObjectId).
import org.bson.types.ObjectId;
public DBObject findDocumentById(String id) {
BasicDBObject query = new BasicDBObject();
query.put("_id", new ObjectId(id));
DBObject dbObj = collection.findOne(query);
return dbObj;
}
Вы можете сделать это
ObjectId id= new ObjectId("4f693d40e4b04cde19f17205");
BasicDBObject obj = new BasicDBObject();
obj.append("_id", id);
BasicDBObject query = new BasicDBObject();
query.putAll((BSONObject)query);
Для тех, кто ищет более современный метод, особенно с 3.4:
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import org.bson.types.ObjectId;
import static com.mongodb.client.model.Filters.eq;
//......
MongoCollection<Document> myCollection = database.getCollection("myCollection");
Document document = myCollection.find(eq("_id", new ObjectId("4f693d40e4b04cde19f17205"))).first();
if (document == null) {
//Document does not exist
} else {
//We found the document
}