这是我的 Mongo DB 结构的示例文档:
{ _id: 1
records: [{n: "Name", v: "Kevin"},
{n: "Age", v: "100"},
...,
{n: "Field25", v: "Value25"} ]
}
要搜索所有具有 的文档Name of "Kevin" and an Age of "100"
,我将$all与$elemMatch 一起使用。我需要使用 $elemMatch 来精确匹配 n:"Name" 和 v:"Kevin" 的子文档,以及 $all,因为我正在查询数组。
db.collection.find({"records" : { $all: [
{$elemMatch: {n: "Name", v: "Kevin"},
{$elemMatch: {n: "Age", v: "100"}
]}})
但是,当第一个 $elemMatch 参数是非选择性的时,$all 运算符效率低下,即有许多文档与该字段匹配。
Mongo Docs详细说明:
在当前版本中,使用 $all 运算符的查询必须扫描与查询数组中的第一个元素匹配的所有文档。因此,即使使用索引来支持查询,操作也可能需要长时间运行,特别是当数组中的第一个元素不是很有选择性时。
我的查询有更好的选择吗?