web-dev-qa-db-ja.com

MongoDBでネストされたインデックスを作成する方法は?

A.「ネストされた」インデックスとその値のすべてにどのようにインデックスを付けますか?

B. valuetwoにインデックスを付けるにはどうすればよいですか?

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

私はここを調べました: http://www.mongodb.org/display/DOCS/Indexes と私の知る限りのドキュメントでは、ネストされていないもののインデックス作成について明確ではありません。

37

トップレベルのフィールドにインデックスを作成する場合と同じように作成します。

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

各フィールドに明示的にインデックスを作成する必要があります。

62

A。「ネストされた」すべてのプロパティにインデックスを付けるには、個別にインデックスを付ける必要があります。

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

これは、1つのコマンドで次のように実行できます。

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

B。 "valuetwo"のみにインデックスを付けるには:

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

EnsureIndexは バージョン3.0.0 以降廃止されているため、ensureIndexではなく createIndex を使用してください。

9
cianmce

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/

3