この場合、どのような動作が予想されますか? mongo は空の配列を null/undefined として扱い、それをスパース インデックスに含めますか、それとも配列が空の場合、ドキュメントはインデックス化されませんか?
質問する
784 次
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 に答える