如何在 MongoDB 中创建嵌套索引?
Posted
技术标签:
【中文标题】如何在 MongoDB 中创建嵌套索引?【英文标题】:How to Create a nested index in MongoDB? 【发布时间】:2012-04-01 13:48:21 【问题描述】:A.如何索引nested
及其所有值?
B.如何索引valuetwo
?
id: 00000,
attrs:
nested:
value: value1,
valuetwo: value2,
我看过这里:http://www.mongodb.org/display/DOCS/Indexes,据我所知,文档并不清楚索引未嵌套的内容。
【问题讨论】:
【参考方案1】:您可以像在***字段上创建索引一样创建它们:
db.collection.createIndex("attrs.nested.value": 1)
您确实需要在每个字段上显式创建索引。
【讨论】:
对于未来的旅行者:ensureIndex() 已被弃用并在版本 3 中被 createIndex() 取代。docs.mongodb.com/manual/reference/method/… @Bryan - 请您在这里指导:***.com/questions/61948943/…【参考方案2】:A. 要索引“嵌套”中的所有属性,您必须单独索引它们:
db.collection.createIndex("attrs.nested.value": 1);
db.collection.createIndex("attrs.nested.valuetwo": 1);
这可以在一个命令中完成:
db.collection.createIndexes(["attrs.nested.value": 1, "attrs.nested.valuetwo": 1]);
B. 仅索引“valuetwo”:
db.collection.createIndex("attrs.nested.valuetwo": 1)
在 ensureIndex 上使用 createIndex,因为 ensureIndex 是 Deprecated since version 3.0.0
【讨论】:
您在 A 中给出的两组索引创建命令是不等效的。第一个在value
和valuetwo
上创建单独的索引。第二个在这两个值上创建一个复合索引。此索引只能用于为 value
指定值的查询。也就是说,仅对 valuetwo
的查询没有用处。
有一个createIndexes() 命令(复数)可以在一个命令中创建多个索引。 (正如@MichaelMior 指出的那样,您的代码创建了一个复合索引,而不是两个单独的索引。)我还没有尝试过,但看起来你会这样做-db.collection.createIndexes(["attrs.nested.value": 1, "attrs.nested.valuetwo": 1]);
@Kip 感谢您指出createIndexes
。我编辑了答案以使用它。【参考方案3】:
如果任何索引字段是数组,MongoDB 会自动创建多键索引;您不需要明确指定多键类型。
这对两个场景都有效
db.coll.createIndex( "addr.pin": 1 )
场景 1 嵌套对象
userid: "1234",
addr:
pin:"455522"
,
userid: "1234",
addr:
pin:"777777"
场景 2 嵌套数组
userid: "1234",
addr: [
pin:"455522" ,
pin:"777777" ,
]
https://docs.mongodb.com/manual/core/index-multikey/
【讨论】:
以上是关于如何在 MongoDB 中创建嵌套索引?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Robo 3T(原 Robomongo)中创建 Mongodb 索引?
如何使用 golang 和 mgo 库在 mongodb 中创建文本索引?