Ben MongoDB içinde boolean bilgileri saklamak için üç ana olanakları bkz: String olarakBoole değerlerini mongodb'de nasıl depolamalıyım?
- 0 veya 1
- Doğru veya bir Boole
olarak yanlış bir Numarası olarak
Ben MongoDB içinde boolean bilgileri saklamak için üç ana olanakları bkz: String olarakBoole değerlerini mongodb'de nasıl depolamalıyım?
olarak yanlış bir Numarası olarak
(MongoDB'nin sunucu tarafı depolama biçimi, aka "Binary JSON") bir yerel alan türüdür. Booleanlar bir tam sayı veya dizgeden daha az depolama kullanır ve karşılaştırmanın beklenmedik yan etkilerinden kaçınırlar.
Örneğin, bir MongoDB find()
sorguda "1"
dize 1
bir sayısal değer veya true
bir Boole değeri uymaz. Boole değerlerini kaydetmek istiyorsanız, kesinlikle bir boole tipi kullanın.
eksiksizliği mongo
kabukta (bayt) BSON boyutu Karşılaştırılması:
// Number (JavaScript double) - 8 bytes
> var foo = { a: 1 }
> Object.bsonsize(foo)
16
// UTF-8 String - 6 bytes
> var foo = { a: '1'}
> Object.bsonsize(foo)
14
// 32-bit int - 4 bytes
> var foo = { a: NumberInt(1)}
> Object.bsonsize(foo)
12
// Boolean - 1 byte
> var foo = { a: true}
> Object.bsonsize(foo)
9
Not: (alan değerlerini hariç) Yukarıdaki örneklerde JSON nesnenin taban boyutu 8 bayt, Bu nedenle, bildirilen Object.bsonsize()
arasındaki fark, alan değerinin gösterimidir.
Birkaç boolean değeriniz varsa, BSON'un boolean'da yerleşik olarak kullanılması iyi olabilir. Fakat aşağıda görüldüğü gibi, her boolean'ın boyutu 4 bayttır. Bu nedenle, verileriniz çok küçükse (fazladan 4 bayta göre) ve/veya çok sayıda boole sahipseniz, bitwise işlemleri ile bir tamsayı bitmap kullanarak daha iyi olabilirsiniz.
> var foo = {}
> Object.bsonsize(foo)
5
> foo.a = true
true
> Object.bsonsize(foo)
9
> foo.b = true
true
> Object.bsonsize(foo)
13
Yanıtımda belirtildiği gibi, temel nesnenin BSON boyutu 8 bayttır (tek bir karakter alan adı dahil, ancak değerler değil); bir Boole değeri 1 bayttır. Birden çok booleanı bit maskelerini kullanarak tek bir tamsayı değerine paketleyebilirsiniz, ancak bu, birkaç baytlık potansiyel tasarruf için ticaret endeksi verimliliği ve şema okunabilirliği sağlar. MongoDB 3.4'te olduğu gibi, bitmask sorguları endeksleri kullanamaz (upvote/watch [SERVER-24749] (https://jira.mongodb.org/browse/SERVER-24749)), bu yüzden, eğer bunlar dahil edilmeyi planlıyorsanız, boole değerleri de önerilir. bir dizindeki alanlar. – Stennie
Neden bir boolean ('true' /' false') dışında _anything_ kullanırsınız? –
wellllllllllllllllllll. Söylemek kısa bir hile ya da muamele. true/false değerine karşı null veya undefined değerini -1 olarak değerlendirebilirsiniz. dolayısıyla bir sayı. ancak bir tanesi mongodb'de $ var olan tanımlanmamış değerleri bulabilir. bu yüzden grt avantajı yok. undefined endeksi hariç ... –