根据集合A

时间:2017-03-29 15:55:19

标签: javascript mongodb mongodb-query

我有两个大集合,它们是交叉使用的(小数据在集合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运算符的查询限制。

1 个答案:

答案 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"
    }
  ]`