我有一個帖子,其字段postStatus
我想設置爲true false或null。我想知道mongo是否能夠索引空值。mongodb能夠索引空值嗎?
此外,如果我選擇null,true和false與使用-1,0,1(或任何3個整數)是否有任何區別?
感謝
空的我有一個帖子,其字段postStatus
我想設置爲true false或null。我想知道mongo是否能夠索引空值。mongodb能夠索引空值嗎?
此外,如果我選擇null,true和false與使用-1,0,1(或任何3個整數)是否有任何區別?
感謝
空的是,null
值索引,如可以,如果你嘗試第二null
值添加到唯一索引證明:
connecting to: test
> db.idxtest.createIndex({a:1},{unique:true})
{
"createdCollectionAutomatically" : true,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
> db.idxtest.insert({a:"foo"})
WriteResult({ "nInserted" : 1 })
> db.idxtest.insert({b:"bar"})
WriteResult({ "nInserted" : 1 })
> db.idxtest.insert({c:"baz"})
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 11000,
"errmsg" : "E11000 duplicate key error index: test.idxtest.$a_1 dup key: { : null }"
}
})
另一種方式證明空值很重要的是通過對文檔包含null
值的索引字段進行排序:
> db.idxtest2.createIndex({a:1})
{
"createdCollectionAutomatically" : true,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
> db.idxtest2.insert({a:1})
WriteResult({ "nInserted" : 1 })
> db.idxtest.insert({a:2})
WriteResult({ "nInserted" : 1 })
> db.idxtest2.insert({b:2})
WriteResult({ "nInserted" : 1 })
> db.idxtest2.insert({a:null})
WriteResult({ "nInserted" : 1 })
> db.idxtest2.find().sort({a:1})
{ "_id" : ObjectId("56786a93ada44c7ffcd38f9f"), "b" : 2 }
{ "_id" : ObjectId("56786aa1ada44c7ffcd38fa0"), "a" : null }
{ "_id" : ObjectId("56786a65ada44c7ffcd38f9d"), "a" : 1 }
> db.idxtest2.find().sort({a:-1})
{ "_id" : ObjectId("56786a65ada44c7ffcd38f9d"), "a" : 1 }
{ "_id" : ObjectId("56786aa1ada44c7ffcd38fa0"), "a" : null }
{ "_id" : ObjectId("56786a93ada44c7ffcd38f9f"), "b" : 2 }
請注意,隱式null
值有優先權;所以說,他們是「更多」null
,因爲他們甚至沒有相應的關鍵。
作爲每BSON specification,一個布爾值是單個字節,而一個整數是至少32位整數耗時4個字節。所以它確實有所作爲,如果您擁有數百萬的條目,那麼......幾兆字節。 ;)因此,所有實際目的沒有任何區別。
尋找稀疏索引https://docs.mongodb.org/v3.0/core/index-sparse/ –