【发布时间】:2019-10-27 21:43:26
【问题描述】:
我有一个收藏
db.list.insert({ first: "apple", second: "banana" });
db.list.insert({ first: "apple", second: "tree" });
db.list.insert({ first: "orange", second: "tree" });
db.list.insert({ first: "medal", second: "sport" });
我想根据这两个字段查询文档,只有当两个字段匹配时才获取文档。
我尝试了以下查询
db.list.find(
$or: [
{ first: 'apple', second: { $in: ['tree', 'banana']}},
{ first: 'orange', second: { $in: ['tree']}}
],
).limit(5);
并为
添加索引{first: 1, second: 1}
在查询计划中,它生成的计划数量与“或”查询中的谓词数量相同。大约有 200 万个文档,如果它在第一个谓词中没有得到它的 5 个文档,那么它会获取与所有谓词匹配的所有文档并且查询超时。 有没有其他有效的方法来做到这一点?
【问题讨论】:
-
还有其他方法,但过滤器将保持不变。你能告诉集合中的条目数和查询结果中的谓词数超时吗?
-
条目数约为 200 万,并且在“或”查询中超时约 5 个谓词。
标签: mongodb mongodb-query query-performance mongodb-indexes