我有两个大集合,它们是交叉使用的(小数据在集合A中,而大二进制数据在集合B中)。它们都具有相同的key
,现在我想根据以下内容删除两个集合中的所有内容:
db.A.remove({ field1: 10 })
field1仅存在于集合A中,但我需要从集合B中删除具有相同key
的结果。到目前为止,我使用db.A.find()
创建了一个游标并删除了db.B
中的所有内容一个人。它可以工作,但是对于像50k +项目这样的大型集合来说非常慢,因此它确实像100k操作一样只是根据查询删除项目。有没有更好的办法?
$ in也有ID数量的限制,所以我正在寻找一些不错的解决方案......
使用$ in运算符和Mongoose,我可以使用类似的东西:
var _ids = [];
A.find({ field1: 10 }).stream().on('data', function(data) {
_ids.push(data._id);
}).once('close', function() {
A.remove({ field1: 10 });
B.remove({ _id: { $in: _ids } });
});
它有点工作,但我担心会有$ in运算符的查询限制。
答案 0 :(得分:1)
我不使用Mongoose,但我可以在mongodb shell中为您提供一个可能的解决方案,我相信您可以在Mongoose中制作相应的代码。你可以做出类似的事情:
"taxonomy": [
{
"score": "0.976715",
"label": "/law, govt and politics/armed forces/army"
},
{
"confident": "no",
"score": "0.499065",
"label": "/technology and computing/computer certification"
},
{
"confident": "no",
"score": "0.496026",
"label": "/law, govt and politics/legal issues/human rights"
}
]`