2

この場合、どのような動作が予想されますか? mongo は空の配列を null/undefined として扱い、それをスパース インデックスに含めますか、それとも配列が空の場合、ドキュメントはインデックス化されませんか?

4

1 に答える 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 に答える