mongodb - 从 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 排除结果。但我想有更好的方法吗?
谢谢!
解决方案
你可以试试这个......但我不确定它是否适用于 10000 个文档
db.collection.aggregate([
{
$group: {
_id: null,
names: {
$push: "$name"
}
}
},
{
$project: {
newArray: {
$setDifference: [
[
"name1",
"name2",
"name3",
"name4"
],
"$names"
]
}
}
}
])
这是代码片段
推荐阅读
- scheme - 如何在 Racket 中“应用”宏/语法?
- google-signin - 有没有办法自定义谷歌一键提示的文字内容?
- c++ - 使用 Mersenne Twister (C++) 为不同线程生成不同的随机数序列
- android - 将我的 android studio 升级到 4.2 后,我遇到了这个错误
- angular - 角度形式,不起作用重置方法不起作用
- javascript - Magento 2 确认 javascript 执行提示/弹出窗口
- c - 通过 MQTT 发送数据:JSON 与 STRING
- python - How to document both names and text in the same message with discord.py
- java - 在 Spring application.yml 属性中未解析 Unicode 转义字符
- c# - 匹配逗号 - 正则表达式