2013-09-02 13 views
26

削除したいmongo '_id'のリストがあります。現在、私はこれをやっています単一のクエリで複数の文書をmongoから削除する

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

しかし、私の問題はリストが大きすぎる...(それは100,000 +を行くかもしれない)です。リスト内のすべての項目を照会すると、サーバーの負荷が増加します。彼らはmongoクエリのリスト全体を渡す方法なので、何度も何度もクエリを起動する必要はありません。

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

答えて

48
db.users.remove({'_id':{'$in':inactive_users}}) 
9

ありがとう整数を受け入れない - あなたはを使わなければならない0インスタンスを_idフォーマットとし、stringとします。

+2

リストが実際には100,000以上の大きなアイテムの場合は、コールごとに数百回のバッチに分割することをお勧めします。 –

3

あなたはObjectId()を使用して特定の形式でidを渡す必要があります:

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

Remove doesnの

はそれらすべてを一覧表示し、$in演算子を使用

2
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); 
}); 
関連する問題