私は以下の2つのフィールドを持つドキュメントの複合キーとして_idフィールドを使用しています。私は私のクエリで一緒に両方のフィールドを使用している場合、私はそれに気づいた何 Mongodb _idフィールドを使用して、1つまたは複数の複合フィールドの一部を照会します。
{
"_id" : {
"timestamp" : ISODate("2016-08-25T05:43:00.000-19:30"),
"hostName" : "nj"
}
}
は、私が唯一のクエリにできています。私がそれらの1つを使用する場合、私は返されたドキュメントを取得しません。
db.getCollection('sales').find(
{
"_id" : {
"hostName" : "tryme"
}
}
db.getCollection('sales').find(
{
"_id" : {
"timestamp" : ISODate("2016-08-25T05:43:00.000-19:30")
}
}
上記のスクリプトではドキュメントが返されません。
はまた、私は
db.getCollection('sales').find(
{
"_id" : {
"timestamp" : {
"$lte":ISODate("2016-08-25T04:51:00.000-19:30")
},
"hostName" : "tryme"
}
}
)
上記はまた、任意のドキュメントを返さない、日付フィールドに$ GTE/$のLTE演算子を使用することはできませんよ。
以下のクエリは機能しますが、コレクションスキャンを使用するexplain()ごとに表示され、インデックスは使用されません。
db.getCollection('sales').find(
{
"_id.timestamp" : ISODate("2016-08-25T04:51:00.000-19:30"),
"_id.hostName" : "tryme"
}
)
==
db.getCollection('sales').find(
{
"_id.timestamp" : {
"$gte": ISODate("2016-08-25T04:52:00.000-19:30")
},
"_id.hostName" : "tryme"
}
)
わかりません_idフィールドがどのように正しく動作するかを理解している場合。
基本的には、コンポジットクエリの部分的なフィールドを使用できるようにしたいと同時に、_idフィールドのインデックスを活用しながら、/より大きい/より小さいなどの範囲クエリに対しても日付タイプフィールドを使用したい。
誰か助けてもらえますか?
おかげで、
スリ
ご意見ありがとうございますが、ドットコレクションの結果をコレクションスキャンで使用し、インデックスを使用していません。 mongoシェルの.explain()メソッドでチェックしました。このクエリのインデックスを使いたいと思います。 – user6594900
@ user6594900 falseの場合、ネストされたインデックスを作成できます。https://stackoverflow.com/questions/9730136/how-to-create-a-nested-index-in-mongodb複合インデックスを使用している場合は、そのコンポーネントが動作するためにそのすべてのコンポーネントを照会する必要があります – martriay