0

假设我有以下文档结构:

{ _id : 1,
  items: [ {n: "Name", v: "Kevin"}, ..., {n: "Age", v: 100} ],
  records : [ {n: "Environment", v: "Linux"}, ... , {n: "RecordNumber, v: 555} ]
}

items.n-items.v如果我在and上创建 2 个复合索引records.n-records.v,我可以执行$all查询:

db.collection.find( {"items" : {$all : [{ $elemMatch: {n: "Name", v: "Kevin"} },
{$elemMatch: {n: "Age", v: 100} } ]}})

我也可以对records.

db.collection.find( {"records" : {$all : [{ $elemMatch: {n: "Environment", v: "Linux"} },
{$elemMatch: {n: "RecordNumber", v: 555} } ]}})

我可以以某种方式执行使用索引基于项目记录字段搜索文档的查询吗?

查找 item.n = "Name" and item.v = "Kevin" AND record.n="RecordNumber" and record.v = 100 的所有文档

我不确定这是否可以使用$all.

4

1 回答 1

2

您可以使用索引来查询一个数组,但不能同时查询。根据文档While you can create multikey compound indexes, at most one field in a compound index may hold an array.

几乎:

  • 您可以使用Compound索引来索引多个字段。
  • 您可以使用Multikey索引来索引数组的所有元素。
  • 您可以将索引用作索引Multikey的一个元素compound
  • 不能在索引中使用多个 索引multikeycompound

文档非常清楚地说明了原因:

MongoDB 不索引并行数组,因为它们要求索引包含复合键的笛卡尔积中的每个值,这可能很快导致索引非常大且难以维护。

于 2013-10-15T18:50:39.977 回答