私はMongoDBを使用して多数の情報を格納しており、インデックス付き配列で値を検索する必要があります。MongoDB配列インデックス検索
は、ここにスキーマです:ドキュメント内の他の値があります
{ "common_name" : { "name" : "thename", "type" : "thetype" } }
が、これは私が探してるだけです。
だから、私はこのような何かが働くだろう考え出し:
db.collection.find({common_name:{$in:"thename"}})
(シェルに)しかし、私は戻って何を取得。
これはここで行われていることとまったく同じように見えます。 http://www.php.net/manual/en/mongo.queries.php - しかし、私は戻って何かを得ることはできません。
(4まで)私は
db.collection.find({"common_name.name":"thename"}})
を試みたし、それがインデックスに複数のノードを検索するための期待通りに動作しますが、それは基本的に各サブカテゴリのための$またはインデックスを定義する、醜い得ることができ、私の質問時間を4倍にしました。これはオートコンプッタに電力を供給しているので、私はそれを行うことはできません。
奇妙なことに、次のいずれかの任意の文書を返しません:
db.collection.find({"common_name":{"name":"thename"}})
私の理解に、上記のクエリとまったく同じものはどれ。
私はかなりモンゴーを新しくしています。
このデータへの最速のアクセス方法(アンカー正規表現を使用して)についてのアイデアはありますか?
私は単にリレーショナルテーブルを使うことができますが、MongoのようなNoSQLシステムの目的を破ることはできませんか?
ああ、私はそれが問題かもしれないと心配していました。スキーマを変更してそのように動作させます。私はhttp://www.php.net/manual/en/mongo.queries.phpのphp docsを誤解しているか、間違っています。ありがとう! – Jesse
うわー、ちょうど配列に変換した後、いくつかのexplain()を実行しました。アンカー付きの正規表現で配列を検索すると55msのコストがかかります。インデックスを作成した後、2になります。 – Jesse
@Jesse - インデックスを一度忘れました。コレクションに約100万のドキュメントがあるまで気付かなかった!インデックスを追加したところ、数ミリ秒に戻りました。 –