[mongodb] mongo 콘솔에서 ObjectId로 객체를 어떻게 검색합니까?

이 질문에 C # 및 Perl에 대한 답변이 있지만 기본 인터페이스에는 해당되지 않습니다. 나는 이것이 효과가 있다고 생각했다.

db.theColl.find( { _id: ObjectId("4ecbe7f9e8c1c9092c000027") } )

쿼리에서 결과가 반환되지 않았습니다. db.theColl.find()ObjectId를 수행 하고 잡아서 4ecbe7f9e8c1c9092c000027을 찾았습니다 . 해당 컬렉션에는 수천 개의 개체가 있습니다.

mongodb.org 웹 사이트에서 찾을 수있는 모든 페이지를 읽었으며 찾지 못했습니다. 이것은 이상한 일입니까? 나에게는 꽤 정상적인 것 같습니다.



답변

전혀 이상하지 않습니다. 사람들은 항상 이것을합니다. 콜렉션 이름이 올 바르고 (사건) ObjectId가 정확한지 확인하십시오.

설명서는 여기

> db.test.insert({x: 1})

> db.test.find()                                               // no criteria
{ "_id" : ObjectId("4ecc05e55dd98a436ddcc47c"), "x" : 1 }

> db.test.find({"_id" : ObjectId("4ecc05e55dd98a436ddcc47c")}) // explicit
{ "_id" : ObjectId("4ecc05e55dd98a436ddcc47c"), "x" : 1 }

> db.test.find(ObjectId("4ecc05e55dd98a436ddcc47c"))           // shortcut
{ "_id" : ObjectId("4ecc05e55dd98a436ddcc47c"), "x" : 1 }


답변

Node.js를 사용하는 경우 :

> var ObjectId = require('mongodb').ObjectId;
> var id = req.params.gonderi_id;
> var o_id = new ObjectId(id);
> db.test.find({_id:o_id})

편집 : 새 ObjectID (id)가 아닌 새 ObjectId (id)로 수정되었습니다.


답변

특히 탭 완성을 사용하면 훨씬 쉽습니다.

db.test.find(ObjectId('4ecc05e55dd98a436ddcc47c'))

편집 : 또한 findOne더 예쁘게 출력 하는 명령 과 함께 작동 합니다.


답변

큰 따옴표를 삽입하지 못했습니다. 정확한 검색어는

db.theColl.find( { "_id": ObjectId("4ecbe7f9e8c1c9092c000027") } )


답변

mongo shell에서 작업하고 있다면 이것을 참조하십시오 : Tyler Brock의 답변

node.js를 사용하여 mongodb를 사용하는 경우 답변을 썼습니다.

ID를로 변환 할 필요는 없습니다 ObjectId. 그냥 사용하십시오 :

db.collection.findById('4ecbe7f9e8c1c9092c000027');

이 콜렉션 메소드는 자동으로 id를 ObjectId로 변환합니다.

반면에 :

db.collection.findOne({"_id":'4ecbe7f9e8c1c9092c000027'})예상대로 작동하지 않습니다. id를 (으)로 수동으로 변환했습니다 ObjectId.

다음과 같이 할 수 있습니다.

let id = '58c85d1b7932a14c7a0a320d';

let o_id = new ObjectId(id);   // id as a string is passed

db.collection.findOne({"_id":o_id});


답변

방금이 문제가 있었고 문서화 된 그대로 정확하게 작동했지만 여전히 작동하지 않았습니다.

오류 메시지를보고 특수 문자를 복사하지 않았는지 확인하십시오. 오류가 발생했습니다.

SyntaxError: illegal character @(shell):1:43

문자 43에 갔을 때, 그것은 따옴표를 붙여 넣은 그대로 따옴표로 묶은 후 객체 ID의 시작일뿐입니다. 커서를 거기에두고 백 스페이스를 누르면 열린 따옴표를 제거했을 때 아무 일도 일어나지 않았습니다. 백 스페이스를 다시 누르면 열린 따옴표가 제거되고 따옴표를 다시 넣고 쿼리를 실행하면 정확히 동일하게 보이지만 작동했습니다.

WebMatrix에서 개발하고 있었고 콘솔에서 객체 ID를 복사했습니다. WebMatrix의 콘솔에서 복사 할 때마다 보이지 않는 문자를 선택하여 오류가 발생할 수 있습니다.


답변

mongo CLI를 열면 올바른 데이터베이스에서 연결되고 권한이 부여됩니다.

다음 예는 “products”라는 컬렉션에서 _id = 568c28fffc4be30d44d0398e가있는 문서찾는 방법을 보여줍니다 .

db.products.find({"_id": ObjectId("568c28fffc4be30d44d0398e")})