How to Create a nested index in MongoDB?

纵然是瞬间 提交于 2019-12-17 23:26:21

问题


A. How do I index "nested" and all of it's values?

B. How do I index valuetwo?

{
    id: 00000,
    attrs: {
        nested:{
            value: value1,
            valuetwo: value2,
        }
    }
}

I've looked here: http://www.mongodb.org/display/DOCS/Indexes, and the docs to my knowledge, aren't clear about indexing things that aren't nested.


回答1:


You'd create them just as if you were creating an index on a top level field:

db.collection.ensureIndex({"attrs.nested.value": 1})

You do need to explicitly create indexes on each field.




回答2:


A. to index all the properties in "nested" you will have to index them separately:

db.collection.createIndex({"attrs.nested.value": 1});
db.collection.createIndex({"attrs.nested.valuetwo": 1});

This can be done in one command with:

db.collection.createIndexes([{"attrs.nested.value": 1}, {"attrs.nested.valuetwo": 1}]);

B. to index just "valuetwo":

db.collection.createIndex({"attrs.nested.valuetwo": 1})

Use createIndex over ensureIndex as ensureIndex is Deprecated since version 3.0.0




回答3:


MongoDB automatically creates a multikey index if any indexed field is an array; you do not need to explicitly specify the multikey type.

This will work for both the scenario's db.coll.createIndex( { "addr.pin": 1 } )

Scenario 1 nested OBJECTS

{
  userid: "1234",
  addr: {
    pin:"455522"
  }
},
{
  userid: "1234",
  addr: {
    pin:"777777"
  }
}

Scenario 2 nested Arrays

{
  userid: "1234",
  addr: [
    { pin:"455522" },
    { pin:"777777" },
  ]
}

https://docs.mongodb.com/manual/core/index-multikey/



来源:https://stackoverflow.com/questions/9730136/how-to-create-a-nested-index-in-mongodb

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!