【发布时间】:2018-08-22 11:31:17
【问题描述】:
如何有效地对具有复合索引的集合进行$in 查找?
索引位于下面每个示例的字段 a 和 b 上。例如:db.foo.createIndex({a: 1, b: 1})
SQL 中的示例:
SELECT *
FROM foo
WHERE (a,b)
IN (
("aVal1", "bVal1"),
("aVal2", "bVal2")
);
我知道你可以这样做:
db.foo.find( {
$or: [
{ a: "aVal1", b: "bVal1" },
{ a: "aVal2", b: "bVal2" },
]
} )
使用$in 运算符是否有更高效的方法来执行此操作?
【问题讨论】:
-
你的索引是什么?什么是样本文件?是什么让您相信
$in是更好的方法? -
@kmdreko 为问题添加了索引信息。一次查找数千条记录的
$or语法似乎比在具有单个字段索引的集合上执行$in慢得多。我希望有一个更高效的解决方案。示例文档包含这两个键以及复合索引和其他一些数据(不确定其他数据与问题的相关性,但如果有,请告诉我,我可以添加更多详细信息)。
标签: mongodb