2013-10-15 78 views
0

比方说,我有以下的文档结构:查询蒙戈在两个阵列

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

如果我创建items.n-items.vrecords.n-records.v 2个复合索引,我可以执行$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} } ]}})

我可以以某种方式进行使用该索引(ES)来搜索基于该项目记录领域文档的查询?

找到在哪里item.n = “Name” 和item.v = “凯文” 和record.n = “RecordNumber” 和record.v所有文件= 100

我不知道这可以使用$all

回答

2

您可以使用索引来查询一个数组,但不能同时使用这两个数组。根据documentation,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不索引并行数组,因为它们要求索引包含每个值在复合键的笛卡尔乘积中,这可能很快导致令人难以置信的巨大和难以维护的指标。