我有一个我要删除的mongo'_id'列表。目前我在做这个
# inactive_users --> list of inactive users
for item in inactive_users:
db.users.remove({'_id' : item})
但我的问题是列表太大了......(它可能会超过100,000+)。因此查询列表中的每个项目只会增加服务器上的负载。他们是一种在mongo查询中传递整个列表的方法,这样我就不必反复激活查询。
谢谢
答案 0 :(得分:64)
db.users.remove({'_id':{'$in':inactive_users}})
答案 1 :(得分:12)
列出所有内容并使用$in
运算符:
db.users.remove({_id:{$in:[id1, id2, id3, ... ]}})
答案 2 :(得分:6)
您需要使用ObjectId()
db.users.remove({_id: {$in: [ObjectId('Item1'), ObjectId('Item2'), ObjectId('Item2')]}});
Remove
不接受整数 - 您必须使用ObjectId
格式的_id
实例作为string
。
答案 3 :(得分: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);
});
答案 4 :(得分:0)
我有相同的问题,并遇到了这些答案,但似乎MongoDB手册建议使用deleteMany而不是remove。 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);
});