복붙노트

[MONGODB] 단일 쿼리에 몽고에서 여러 문서를 제거

MONGODB

단일 쿼리에 몽고에서 여러 문서를 제거

나는 몽고 '_id'나는 삭제하려는 목록을 가지고있다. 현재 내가이 일을하고있다

# inactive_users -->  list of inactive users 
for item in inactive_users:
    db.users.remove({'_id' : item})

하지만 내 문제는 (이 100,000 +를 갈 수도) ... 목록이 너무 거대하다. 목록에있는 모든 항목에 대한 쿼리 만 서버의 부하를 증가 그래서. 나는 또 다시 화재 쿼리 필요 없다 너무 몽고 쿼리의 전체 목록을 전달하는 그들의 방법입니다.

고맙습니다

해결법

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

    1.

    db.users.remove({'_id':{'$in':inactive_users}})
    
  2. ==============================

    2.목록 모두 및 연산자를 사용 $ :

    목록 모두 및 연산자를 사용 $ :

    db.users.remove({_id:{$in:[id1, id2, id3, ... ]}})
    
  3. ==============================

    3.당신은 ObjectId가 ()를 사용하여 특정 형식으로 ID를 전달해야합니다 :

    당신은 ObjectId가 ()를 사용하여 특정 형식으로 ID를 전달해야합니다 :

    db.users.remove({_id: {$in: [ObjectId('Item1'), ObjectId('Item2'), ObjectId('Item2')]}});
    

    제거 정수 동의하지 않습니다 - 당신은 문자열로 _id 형식 ObjectId가 인스턴스를 사용해야합니다.

  4. ==============================

    4.

    var collection = db.users;
    var usersDelete = [];
    var ObjectID = req.mongo.ObjectID;   //req is request from express
    
    req.body.forEach(function(item){     //req.body => [{'_id' : ".." , "name" : "john"}]
        usersDelete.push(new ObjectID(item._id));
    });
    
    collection.remove({'_id':{'$in': usersDelete}},function(){
        //res.json(contatos);
    });
    
  5. ==============================

    5.나는이 답변에 동일한 질문으로 실행했다하지만 MongoDB의 설명서가 제거 대신 deleteMany 추천 것 같다. deleteMany은 삭제 계수뿐만 아니라 (조작이 성공했을 경우) 쓰기 우려의 승인을 반환합니다.

    나는이 답변에 동일한 질문으로 실행했다하지만 MongoDB의 설명서가 제거 대신 deleteMany 추천 것 같다. deleteMany은 삭제 계수뿐만 아니라 (조작이 성공했을 경우) 쓰기 우려의 승인을 반환합니다.

    const ids = [id1, id2, id3...];
    const query = { _id: { $in: ids} };
    dbo.collection("users").deleteMany(query, function (err, obj) {
        if (err) throw err;
    });
    

    또는 화살표 기능 :

    const ids = [id1, id2, id3...];
    const query = { _id: { $in: ids} };
    dbo.collection("users").deleteMany(query, (err, obj) => {
        if (err) throw err;
    });
    

    또는 더 나은 아직, 약속과 :

    const ids = [id1, id2, id3...];
    const query = { _id: { $in: ids} };
    dbo.collection("users").deleteMany(query)
    .then(result => {
        console.log("Records Deleted");
        console.log(JSON.stringify(result));
        //for number removed...
        console.log("Removed: " + result["n"]);
    })
    .catch(err => {
        console.log("Error");
        console.log(err);
    });
    
  6. from https://stackoverflow.com/questions/18566590/remove-multiple-documents-from-mongo-in-a-single-query by cc-by-sa and MIT license