この場合、どのような動作が予想されますか? mongo は空の配列を null/undefined として扱い、それをスパース インデックスに含めますか、それとも配列が空の場合、ドキュメントはインデックス化されませんか?
1 に答える
1
null空の配列は、MongoDBと同じようには扱われません。次の Mongo シェルのコードでわかるように、スパース インデックスは空の配列を as ではなく空の配列として検出しnullます。
> c = db.docs
test.docs
> c.insert({a : []})
> c.ensureIndex({a : 1}, {sparse: true})
> c.find({a : []}).count()
1
> c.find({a : null}).count()
0
MongoDB に関する最も興味深い質問と同様に、使用explainすると豊富な情報が得られます。たとえば、テストで実際にインデックスが使用されていること、およびインデックスの境界が と であることがわかりますnull。これは[]、それらの独自の処理を示しています。
> c.find({a : null}).explain()
{
"cursor" : "BtreeCursor a_1",
"isMultiKey": false,
"n" : 0,
"nscannedObjects": 0,
「nscanned」: 0,
"nscannedObjectsAllPlans": 0,
"nscannedAllPlans": 0,
"scanAndOrder": false,
"indexOnly": 偽,
"nYields": 0,
"nChunkSkips": 0,
「ミリ」:0、
"indexBounds": {
"a" : [
[
ヌル、
ヌル
]
]
}、
「サーバー」:「新しいホスト.ホーム:27017」
}
> c.find({a : []}).explain()
{
"cursor" : "BtreeCursor a_1 multi",
"isMultiKey": false,
"n" : 1,
"nscannedObjects": 1,
"nscanned": 1,
"nscannedObjectsAllPlans": 1,
"nscannedAllPlans": 1,
"scanAndOrder": false,
"indexOnly": 偽,
"nYields": 0,
"nChunkSkips": 0,
「ミリ」:0、
"indexBounds": {
"a" : [
[
ヌル、
ヌル
]、
[
[ ]、
[ ]
]
]
}、
「サーバー」:「新しいホスト.ホーム:27017」
}
于 2013-04-08T03:18:18.450 に答える