programing

Java mongodb 드라이버에서 "_id" 필드를 사용하여 문서를 쿼리하는 방법은 무엇입니까?

batch 2023. 5. 6. 14:12
반응형

Java mongodb 드라이버에서 "_id" 필드를 사용하여 문서를 쿼리하는 방법은 무엇입니까?

저는 "_id" 키를 검색하여 MongoDB에서 문서를 찾으려고 합니다.내 서류는 이렇게 생겼어요

{
  "_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: reference to putAll is ambiguous, both method putAll(Map) in BasicBSONObject and method putAll(BSONObject) in BasicBSONObject match
        query.putAll(query);

BasicDBObject 지원(String Key, Value)의 추가 메서드이며, 이 메서드에 "_id"를 String으로 전달하면 일치하는 문서가 없습니다.

그래서 제 질문은 "_id"를 어떻게 통과시키나요?

다른 사람들이 이 주제에 대한 답을 찾고 있을지는 모르겠지만, 여기 "_id"를 기반으로 MongoDB 레코드를 검색하는 가장 쉬운 방법이 있습니다.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;
}

특히 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
}

당신은 이걸 할 수 있다.

 ObjectId id= new ObjectId("4f693d40e4b04cde19f17205");        
    BasicDBObject obj = new BasicDBObject();        
    obj.append("_id", id);        
    BasicDBObject query = new BasicDBObject();        
    query.putAll((BSONObject)query);

쿼리를 다음과 같이 사용하여 해결했습니다.

query.putAll((BSONObject)query);

보다 간단한 방법은 다음과 같습니다.

Bson filter = Filters.eq("_id", new ObjectId("4f693d40e4b04cde19f17205"));
mongoConfig.getMongoTemplate().getCollection("myCollection").find(filter);

여기 참조: https://www.baeldung.com/mongodb-query-documents-id

코드를 조금 더 사용하면 ID를 나타내는 문자열이 인수로 전달되는 방법을 찾았습니다.

import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.Filters;
import org.bson.conversions.Bson;
import org.bson.Document;
import org.bson.types.ObjectId;   

[...]

public static void findCustomerById(String id) {
    try (MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017")) {
        MongoDatabase database = mongoClient.getDatabase("database_name");
        Bson filter = Filters.eq("_id", new ObjectId(id));
        MongoCollection<Document> collection = database.getCollection("customer");

        //Tries to find the document
        Document doc = collection. Find(filter).first();
        //prints the document
        System.out.println(doc.toJson());
    } catch (Exception e) {
        System.out.println("Error finding document");
        System.out.println("Error in: " + e.getMessage());
        e.printStackTrace();
    }

다음 스니펫을 사용해 볼 수 있습니다.

ObjectId id= new ObjectId("4f693d40e4b04cde19f17205");        
BasicDBObject obj = new BasicDBObject();        
obj.append("_id", id);        
BasicDBObject query = new BasicDBObject();        
query.putAll((BSONObject)obj);

언급URL : https://stackoverflow.com/questions/9797935/how-to-query-documents-using-id-field-in-java-mongodb-driver

반응형