2016-08-25 22 views
1

mongodbのすべてのコレクションに_idカラムのデフォルトのインデックスがあるので、私は以下のように私のシナリオに活用したかったのです。MongoDB _idフィールドを複数のフィールドを持つ複合フィールドとして使用

私は一部である1つ以上のフィールドでクエリを実行するとき、私は、

db.getCollection('test').find(
{ 
    "_id" : { 
     "timestamp" : ISODate("2016-08-21T23:22:20.201Z"), 
     "departmentname" : "sales", 
     "city":"NJ" 
    } 
} 
) 

、私は以下のように照会することができています。この構造により

{ 
    "_id":{ 
      "timestamp" : ISODate("2016-08-24T23:22:20.201Z"), 
      "departmentname" : "sales", 
      "city":"NJ" 
     } 

     //Other fields in my collection 
} 

、以下のように私のコレクションを持っていますが、以下のように_id列の、

db.getCollection('test').find(
{ 
    "_id" : { 
     "timestamp" : ISODate("2016-08-21T23:22:20.201Z") 
    } 
} 
) 

(OR)

db.getCollection('test').find(
{ 
    "_id" : { 
     "departmentname" : "sales" 
    } 
} 
) 

(OR)

db.getCollection('test').find(
{ 
    "_id" : { 
     "departmentname" : "sales", 
     "city":"NJ" 
    } 
} 
) 

私は(.explainで確認すると任意のドキュメントが

を返されたIが表示されていない)私はそれがインデックスを使用していることがわかりますが任意のドキュメントを見つけることができませんでした。私はすべての文書が返され表示されていない、

また、私は、以下のような_id列内の1つまたは複数のフィールド上のクエリと一緒にタイムスタンプフィールドに日付範囲クエリをしたいと思っ

db.getCollection('test').find(
{ 

    "_id.timestamp" : { 
     "$gte": ISODate("2011-08-21T23:22:20.201Z") 
    }, 
    "_id.departmentname" : "sales" 
} 
) 

しかし。 .explain()を実行すると、colscanが使用されていて、インデックスが作成されていないことがわかります。

誰かが正しい方法で私の_id列の1つ以上のフィールドでクエリを手伝うことができますか?

おかげで、

スリ

答えて

2

は、あなたが最初のケースでは、クエリを次のよう試すことができます: - 複数のフィールドのための

db.getCollection('test').find(
{ 
    "_id.timestamp" : ISODate("2016-08-21T23:22:20.201Z") 
}) 

そして、これを..その加工さ

db.getCollection('test').find(
{ 
    "_id.timestamp" : ISODate("2016-08-21T23:22:20.201Z"), 
    "_id.departmentname" : "sales", 
}) 
+0

感謝。 – javauser

+0

findのドキュメントも参照してください。それが助けてくれてうれしい。 – Shrabanee

+0

クエリを実行するときに.explain()を実行すると、_idフィールドのインデックスが使用されていないように見えます。コレクションスキャンを行い、インデックスを使用していません。なぜそれがそうだろう? – javauser

関連する問題