首页 > 解决方案 > 从 js 数组中排除不在我的集合中的项目

问题描述

假设我有一个包含 10000 个文档的集合,如下所示:

{"_id": 1, "name": "aaa"}
{"_id": 1, "name": "bbb"}
{"_id": 2, "name": "ccc"}
...

现在前端用户提交一个包含 100 个名称的数组,如下所示:

myArray = ["name1", "name2", "name3", "name4", ... "name100"]

他想知道这 100 个中的哪些还没有在数据库中,所以我需要返回一个新数组,其中包含这 100 个名称减去那些可以在我的集合中找到的名称。我怎样才能做到这一点?

我在 Node (npm mongodb) 中使用官方的 MongoDB 驱动程序。

我目前所做的是首先通过执行 db.collection.find({name: {$in: myArray}}) 查找数据库中的名称,然后通过 javascript 排除结果。但我想有更好的方法吗?

谢谢!

标签: mongodb

解决方案


你可以试试这个......但我不确定它是否适用于 10000 个文档

db.collection.aggregate([
  {
    $group: {
      _id: null,
      names: {
        $push: "$name"
      }
    }
  },
  {
    $project: {
      newArray: {
        $setDifference: [
          [
            "name1",
            "name2",
            "name3",
            "name4"
          ],
          "$names"
        ]
      }
    }
  }
])

这是代码片段


推荐阅读