Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb Mongo多键作为索引的替代品?_Mongodb - Fatal编程技术网

Mongodb Mongo多键作为索引的替代品?

Mongodb Mongo多键作为索引的替代品?,mongodb,Mongodb,我注意到,对于索引数组,MongoDB文档建议应该使用多键。但是,它并没有说明任何关于显式创建多键作为索引的内容。这似乎是自动的。对吗?我不需要在数组元素上创建索引吗?我应该在父字段上创建索引吗 更新 我应该补充一点,我所说的数组包含嵌入式文档。以下是文档部分的一个具体示例: { _a: [{ _aid: "4e5d43698d3a329553111227", _an: true _aim: "http://graph.facebook.com/7403766/p

我注意到,对于索引数组,MongoDB文档建议应该使用多键。但是,它并没有说明任何关于显式创建多键作为索引的内容。这似乎是自动的。对吗?我不需要在数组元素上创建索引吗?我应该在父字段上创建索引吗

更新

我应该补充一点,我所说的数组包含嵌入式文档。以下是文档部分的一个具体示例:

{
 _a: [{
    _aid: "4e5d43698d3a329553111227",
    _an:  true
    _aim: "http://graph.facebook.com/7403766/picture"
    _ana: "Nick ONeill"
      },
       {
    _aid: "4e5d43698d3a329553111228",
    _an:  true
    _aim: "http://graph.facebook.com/129312401/picture"
    _ana: "Joe Peterson"
      }]
 }

数组字段上的索引或包含数组字段的索引自动成为多键索引。这意味着索引中将有多个条目,一个用于数组的每个元素,一个用于整个数组。这允许在单个数组元素上进行匹配,如:

db.foo.find({myArrayField: "bar"})
{name: "whatever", myArrayField: ["foo", "bar", "baz"]}
将匹配以下文档:

db.foo.find({myArrayField: "bar"})
{name: "whatever", myArrayField: ["foo", "bar", "baz"]}
在查询此类字段时,MongoDB确保任何给定文档只返回一次,即使它匹配多次:

> db.foo.find({myArrayField: {$in: ["foo", "bar"]}})
{"name" : "whatever", "myArrayField" : [ "foo", "bar", "baz" ]}
编辑:您可以为包含嵌入文档以及“基本”类型的数组编制索引。执行此操作时,您可能希望使用运算符搜索嵌入文档上的部分匹配项:

(关于编辑的说明:我已经更新了示例,以演示如何使用具有多个元素的
$elemMatch
;当查询仅使用一个嵌入式文档字段时,您不需要
$elemMatch


因此,我应该在父字段上创建一个索引,然后所有数组元素都将自动被索引?我应该更具体地说,我的数组是一个嵌入文档的数组。例如,{u a:[{u-aid:“4e5d43698d3a329553111115”,“u-an:true”,“u-aim:”,\u-ana:“Nick-ONeill”}}所以我不需要单独索引嵌入的文档元素?这取决于您希望查询的方式。如果总是查询数组中文档的精确匹配项,请为数组元素编制索引。如果您是按嵌入文档的某个字段进行查询,则可以只对该字段编制索引。