source

단일 쿼리에서 mongo에서 여러 문서 제거

ittop 2023. 5. 17. 23:25
반응형

단일 쿼리에서 mongo에서 여러 문서 제거

삭제하고 싶은 mongo '_id' 목록이 있습니다.현재 저는 이것을 하고 있습니다.

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

하지만 제 문제는 목록이 너무 크다는 거예요(100,000 +로 갈 수도 있습니다.)따라서 목록의 모든 항목을 쿼리하면 서버의 부하만 증가합니다.그들은 내가 쿼리를 반복해서 실행할 필요가 없도록 전체 목록을 mongo 쿼리로 전달하는 방법입니다.

감사해요.

db.users.deleteMany({'_id':{'$in':inactive_users}})

모두 나열하고 사용합니다.$in연산자:

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

다음을 사용하여 특정 형식으로 ID를 전달해야 합니다.ObjectId():

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

Remove정수를 사용할 수 없습니다. 사용해야 합니다.ObjectId의 예._id형식을 지정합니다.string.

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

저도 같은 질문을 하고 이 답변들을 검색했는데 MongoDB 매뉴얼에서 remove 대신 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);
});

언급URL : https://stackoverflow.com/questions/18566590/remove-multiple-documents-from-mongo-in-a-single-query

반응형