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


265

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

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

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

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

답변:


416

전혀 이상하지 않습니다. 사람들은 항상 이것을합니다. 콜렉션 이름이 올 바르고 (사건) 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 }

1
이상하게도 콘솔을 다시 시작하면 갑자기 작동했습니다. "스코프"나 명령 행에서 무언가를 바꿀 수있는 방법이 있습니까?
jcollum

당연한 일입니다. 'find ObjectID'를 검색 할 때 해당 페이지가 나타나지 않았습니다 : mongodb.org/…
jcollum

1
예, 실수로 "use dbname"을 입력하고 데이터베이스를 전환했을 수 있습니다. 나는 당신이 복제 또는 샤딩을 사용하지 않는다고 가정하고 있는데, 이것이 보이지 않는 이유에 대한 다른 가능성을 분명히 만들 것입니다.
Tyler Brock

1
문제는 내 _id 주위에 따옴표를 넣지 않았다는 것입니다.
jcollum

9
와우, 이것이 MongoDB에서 이것이 특별한 문제라는 것을 전혀 몰랐습니다. 내 문제가 다른 곳에 있다고 생각하면서 약간의 시간을 낭비했지만 추가 규칙이 필요했습니다. express와 node를 사용하는 사람들에게 가치가있는 것은 ObjectId exp를 요구할 것이다 ... var ObjectId = require ( 'mongodb'). ObjectID;
Chris Hawkes

87

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)로 수정되었습니다.


5
import { ObjectId } from "mongodb";더 멋진 JS에서 작동합니다.
NetOperator Wibby

84

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

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

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


mysql에서 WHERE IN 조건을 구현하는 것과 같은 방식으로 여러 객체 ID로 검색하려는 경우.
Pratswinz

TypeError : filter는 dict, bson.son.SON 또는 collections에서 상속 된 다른 유형의 인스턴스 여야합니다. Mapping
David Okwii

1
@DavidOkwii-이 예제는 MongoShell입니다. 파이썬에서 실행중인 것 같습니다.이 경우 다음과 같은 작업을 수행하려고합니다.db.test.find({'_id': ObjectId('4ecc05e55dd98a436ddcc47c')})
MPlanchard

db.test.findOneAndDelete(ObjectId('57eujhs76e7hs877e868'))명령 에이 접근 방식을 사용 하면 ObjectId가 지정된 ID와 일치하지 않더라도 문서가 삭제됩니다. 당신은 정확히 다음과 같이 지정해야합니다db.test.find({'_id': ObjectId('4ecc05e55dd98a436ddcc47c')})
대니 Sofftie에게

1
이 질문은 문제가 find()아니라 문제였습니다 findOneAndDelete().
MPlanchard

18

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

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

"문제는 내 _id 주위에 따옴표를 넣지 않았다는 것입니다." -2011 년 12 월 7 일, 첫 번째 답변에 대한 의견 참조
jcollum

@jcollum 업데이트로서, 지금 입력 한 쿼리는 _id 주위에 따옴표없이 유효합니다.
AnimalTesting

4

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});

findById는 mongoose의 함수 / 방법이어야합니다. mongoose를 사용하지 않는 한 내부적으로 문자열을 ObjectId로 변환합니다.
whoami

1
yes..i는 ..... 그 몽구스가 필요 얘기를 깜빡 했네요 보정 주셔서 감사합니다
saurabh 굽타

3

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

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

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

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

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


3

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

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

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

2

MongoDB 스티치 기능에서 아래와 같이 BSON을 사용하여 수행 할 수 있습니다 .

ObjectId다음 예제와 같이 BSON 유틸리티 패키지 의 도우미를 사용하십시오 .

var id = "5bb9e9f84186b222c8901149";  
BSON.ObjectId(id);

1

나는 당신이 다음과 같은 것을 더 잘 작성한다고 생각합니다.

db.getCollection('Blog').find({"_id":ObjectId("58f6724e97990e9de4f17c23")})

이 코드가 질문에 어떻게 대답하는지 조금 설명해 주시겠습니까?
Ḟḹáḿíṅḡ Ⱬỏḿƀíé

-1

Objectid 메소드를 사용하기 위해 가져올 필요가 없습니다. 이미 mongodb 오브젝트에 있습니다.

var ObjectId = new db.ObjectId('58c85d1b7932a14c7a0a320d');
db.yourCollection.findOne({ _id: ObjectId }, function (err, info) {
   console.log(info)
});
               


1
아니오 :TypeError: db.ObjectId is not a function
jorisw

그것은 단지ObjectId("SOMETHING")
벤 싱클레어

-1

Node.js를 사용하는 경우 :

그 req.user에서 ObjectId 형식입니다.

var mongoose = require("mongoose");
var ObjectId = mongoose.Schema.Types.ObjectId;

function getUsers(req, res)
    User.findOne({"_id":req.user}, { password: 0 }) 
         .then(data => { 
             res.send(data);})g
}
exports.getUsers = getUsers;

-5

간단히 :

db.getCollection('test').find('4ecbe7f9e8c1c9092c000027');

Mongo Shell버전 3.2.7 부터는 작동하지 않습니다 .
Amio.io

1
문자열 인 _id 와만 일치합니다. 실제 ObjectId 인 경우 ObjectId 구문을 사용하여 검색해야합니다.
Vince Bowdren
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.