반응형
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
반응형
'programing' 카테고리의 다른 글
Eclipse/Maven 오류: "이 환경에는 컴파일러가 제공되지 않습니다." (0) | 2023.05.06 |
---|---|
현재 사용자의 임시 폴더를 가져오는 방법 (0) | 2023.05.06 |
원격 Git 저장소의 URI(URL)를 변경하려면 어떻게 해야 합니까? (0) | 2023.05.06 |
Python 3에서 맵이 목록 대신 맵 객체를 반환하는 이유는 무엇입니까? (0) | 2023.05.06 |
반환 유형이 없는 함수 대리자 (0) | 2023.05.06 |