MongoDB는 _id 배열에서 어디를 선택합니까?


94

mongo db에서 SQL과 같은 컬렉션의 문서를 선택할 수 있습니다.

SELECT * FROM collection WHERE _id IN (1,2,3,4);

또는 내가있는 경우 _id array하나씩 선택하고 array/object결과 를 재구성해야 합니까?

답변:


168

쉬움 :)

db.collection.find( { _id : { $in : [1,2,3,4] } } );

출처 : http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24in


여전히 인덱싱의 이점을 누리고 있습니까? 이 경우에 ID가 ... 일반 문자열로 전달됩니다
라팔 Pastuszak을

2
그렇습니다. 그러나 시간 복잡성은 선형 (n)이지 로그 / 상수가 아닙니다. 인덱스가 없으면 n ^ 2가됩니다.
페트르 Brazdil

그렇지 않은 O(log(n) * m)경우 n컬렉션의 크기와 mID의 수는 전달입니까?
Guig 2011

8
"_id"가 ID 개체 인 경우 U는 ObjectId 함수를 사용해야합니다. — {_id : {$ in : [ObjectId ( "5a633609670aeb6f93b88b23")]}}
Pax Beach

5

목록은 ID의 배열입니다.

이 코드 목록에는 사용자 컬렉션의 ID 배열이 있습니다.

var list = ["5883d387971bb840b7399130","5883d389971bb840b7399131","5883d38a971bb840b7399132"]

    .find({ _id: {$in : list}})

4
코드가 작동하지 않습니다. ID를 ObjectId ( "5883d387971bb840b7399130")로 설정해야하는 것 같습니다
Pax Beach

1

mongodb는 bson및 bson을 사용하기 때문에 중요한 속성 유형입니다. 다음과 같이 사용해야하기 때문 _id입니다 ObjectId.

db.collection.find( { _id : { $in : [ObjectId('1'),ObjectId('2')] } } );

다음과 mongodb compass같이 사용됩니다.

{ "_id" : { $in : [ObjectId('1'),ObjectId('2')] } }

참고 : 문자열의 objectId에는 24길이가 있습니다.


0

당신이 사용자와도 조건 같은 다른 분야에서 찾으려는 경우, 당신은 쉽게 확산 및 삼항 연산자 사용에 아래처럼 할 수 aggregatematch

 const p_id = patient_id;
    let fetchingReports = await Reports.aggregate([
      ...(p_id
        ? [
            {
              $match: {
                createdBy: mongoose.Types.ObjectId(id),
                patient_id: p_id,
              },
            },
          ]
        : [
            {
              $match: {
                createdBy: mongoose.Types.ObjectId(id),
              },
            },
        

-4

이것은 mongo 쿼리와 관련이 없습니다. 저는 SQL에 익숙했고 Studio3T IDE를 사용하여 SQL을 사용하여 mongo 데이터베이스를 쿼리했습니다. 당신이 나와 같은 사람이라면 id 값을 형변환해야한다는 점을 지적하고 싶습니다. 따라서 쿼리는 다음과 같습니다.

SELECT _id from <collectionName>
WHERE _id = ObjectId("5883d387971bb840b7399130");

2
이것은 질문을 전혀 다루지 않습니다.
loctrice

대답하지 않고 동의합니다. SQL을 사용하여 mongoDB와 상호 작용할 수있는 Studio3T와 같은 일부 IDE에서 도움이 될 수 있습니다. 거기에 적용이 있습니다. 또한이 경우에도 _id는 형변환되어야 함을 강조합니다.
sourabhxiii

1
그 약 mongodb
Rohit
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.