복붙노트

[MONGODB] MongoDB를 / 몽구스 findMany - 배열에 나열된 ID를 가진 모든 문서를 찾을 수

MONGODB

MongoDB를 / 몽구스 findMany - 배열에 나열된 ID를 가진 모든 문서를 찾을 수

내가 _ids의 배열을 가지고 있고 그에 따라 모든 문서를 얻으려면, 그것을 할 수있는 가장 좋은 방법은 무엇입니까?

같은 뭔가 ...

// doesn't work ... of course ...

model.find({
    '_id' : [
        '4ed3ede8844f0f351100000c',
        '4ed3f117a844e0471100000d', 
        '4ed3f18132f50c491100000e'
    ]
}, function(err, docs){
    console.log(docs);
});

배열은 _ids의 수백을 포함 할 수 있습니다.

해결법

  1. ==============================

    1.몽구스의 찾기 기능은 MongoDB에 대한 전체 쿼리입니다. 이 방법은 당신은 단지 동일한의 SQL 버전처럼 작동 절에 편리 MongoDB를 $를 사용할 수 있습니다.

    몽구스의 찾기 기능은 MongoDB에 대한 전체 쿼리입니다. 이 방법은 당신은 단지 동일한의 SQL 버전처럼 작동 절에 편리 MongoDB를 $를 사용할 수 있습니다.

    model.find({
        '_id': { $in: [
            mongoose.Types.ObjectId('4ed3ede8844f0f351100000c'),
            mongoose.Types.ObjectId('4ed3f117a844e0471100000d'), 
            mongoose.Types.ObjectId('4ed3f18132f50c491100000e')
        ]}
    }, function(err, docs){
         console.log(docs);
    });
    

    이 방법은 심지어 배열이 수십 ID의 수천을 포함하는 잘 작동합니다. (참조 효율적으로 기록의 소유자를 결정)

    나는 MongoDB를 작업하는 사람이 우수한 공식 MongoDB를 문서의 고급 쿼리 섹션을 읽어 것이 좋습니다

  2. ==============================

    2.쿼리의 형식을 사용

    쿼리의 형식을 사용

    let arr = _categories.map(ele => new mongoose.Types.ObjectId(ele.id));
    
    Item.find({ vendorId: mongoose.Types.ObjectId(_vendorId) , status:'Active'})
      .where('category')
      .in(arr)
      .exec();
    
  3. ==============================

    3.모두 Node.js를하고 MongoChef는 ObjectId가로 변환 나를 ​​강제로. 이것은 내가 몇 가지 속성을 DB에서 사용자 목록을 잡아 가져 오기 위해 사용하는 것입니다. 라인 8 유형 변환을 마음.

    모두 Node.js를하고 MongoChef는 ObjectId가로 변환 나를 ​​강제로. 이것은 내가 몇 가지 속성을 DB에서 사용자 목록을 잡아 가져 오기 위해 사용하는 것입니다. 라인 8 유형 변환을 마음.

    // this will complement the list with userName and userPhotoUrl based on userId field in each item
    augmentUserInfo = function(list, callback){
            var userIds = [];
            var users = [];         // shortcut to find them faster afterwards
            for (l in list) {       // first build the search array
                var o = list[l];
                if (o.userId) {
                    userIds.push( new mongoose.Types.ObjectId( o.userId ) );           // for the Mongo query
                    users[o.userId] = o;                                // to find the user quickly afterwards
                }
            }
            db.collection("users").find( {_id: {$in: userIds}} ).each(function(err, user) {
                if (err) callback( err, list);
                else {
                    if (user && user._id) {
                        users[user._id].userName = user.fName;
                        users[user._id].userPhotoUrl = user.userPhotoUrl;
                    } else {                        // end of list
                        callback( null, list );
                    }
                }
            });
        }
    
  4. ==============================

    4.IDS는 오브젝트 ID의 배열이다 :

    IDS는 오브젝트 ID의 배열이다 :

    const ids =  [
        '4ed3ede8844f0f351100000c',
        '4ed3f117a844e0471100000d', 
        '4ed3f18132f50c491100000e',
    ];
    

    콜백 몽구스를 사용 :

    Model.find().where('_id').in(ids).exec((err, records) => {});
    

    비동기 기능 몽구스를 사용 :

    records = await Model.find().where('_id').in(ids).exec();
    

    실제 모델과 모델을 변경하는 것을 잊지 마십시오.

  5. from https://stackoverflow.com/questions/8303900/mongodb-mongoose-findmany-find-all-documents-with-ids-listed-in-array by cc-by-sa and MIT license