製品コレクションに3つのドキュメントがあります。
samsung = {
title: 'Samsung Galaxy S III',
category_id: ObjectId("50bcc2f0b910a6c1936a4424"),
properties: [
{
title: 'OS',
value: 'Android'
},
{
title: 'Display',
value: '4.8"'
}
]
}
htc = {
title: 'HTC One X',
category_id: ObjectId("50bcc2f0b910a6c1936a4424"),
properties: [
{
title: 'OS',
value: 'Android'
},
{
title: 'Display',
value: '4.7"'
}
]
}
apple = {
title: 'Apple iPhone 5',
category_id: ObjectId("50bcc2f0b910a6c1936a4424"),
properties: [
{
title: 'OS',
value: 'iOS'
},
{
title: 'Display',
value: '4"'
}
]
}
およびインデックス{category_id: 1, 'properties.title': 1, 'properties.value': 1}
。
インデックスは次のようになります。
ObjectId("50bcc2f0b910a6c1936a4424")
OS
Android
samsung
htc
iOS
apple
Display
4.8"
samsung
4.7"
htc
4"
apple
そして、私はそのクエリを期待しています:
{
category_id: ObjectId("50bcc2f0b910a6c1936a4424"),
properties: {
$elemMatch: {
title: 'OS',
value: 'Android'
}
}
}
nscanned == 2、nscannedObjects == 2、n == 2.しかし、私はそのような出力を次のように取得しますexplain()
。
{
"cursor" : "BtreeCursor category_id_1_properties.title_1_properties.value_1",
"nscanned" : 3,
"nscannedObjects" : 3,
"n" : 2,
"millis" : 0,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : true,
"indexOnly" : false,
"indexBounds" : {
"category_id" : [
[
ObjectId("50bcc2f0b910a6c1936a4424"),
ObjectId("50bcc2f0b910a6c1936a4424")
]
],
"properties.title" : [
[
"OS",
"OS"
]
],
"properties.value" : [
[
{
"$minElement" : 1
},
{
"$maxElement" : 1
}
]
]
}
}
indexBounds
なぜそうで"properties.value"
はないのか説明してもらえます["Android","Android"]
か?
インデックスを使用して適切な電話を取得するために、クエリを書き直したり、インデックスを再構築したりできますか?