感谢您查看我的查询。我有 20k+ 个由客户端提供的唯一标识 ID,我想使用单个查询在 MongoDB 中查找所有这些 id。我尝试使用 $in 进行查找,但将所有 20K Id 放入 $in 中并进行搜索似乎并不可行。有没有更好的实现版本。
如果 id 字段被索引,那么 IN 查询应该非常快,但我认为一次性执行 20k id 的查询不是一个好主意,因为它可能会消耗相当多的资源,例如内存,您可以将 id 分成多个具有合理大小的组并分别执行查询,并且您仍然可以在应用程序级别并行执行查询。
考虑将您的 20k+ id 导入到集合中(例如使用
mongoimport
等)。然后执行从根集合到搜索集合的 $lookup
。根据$lookup result
是否为空数组,您可以继续需要$in
的原始操作。
db.rootCollection.aggregate([
{
"$lookup": {
"from": "searchCollection",
"localField": "_id",
"foreignField": "_id",
"as": "searchLookup"
}
},
{
"$addFields": {
"matched": {
$ne: [
"$searchLookup",
[]
]
}
}
},
{
$match: {
matched: true
}
}// perform your other operations
])
这里有Mongo游乐场供大家参考。