- Mastering MongoDB 3.x
- Alex Giamas
- 324字
- 2021-08-20 10:10:50
Comparing different data types
Due to the nature of MongoDB, it's perfectly acceptable to have different data type objects in the same field. This may happen by accident or on purpose (that is, null and actual values in a field)
The sorting order of different types of data is as follows from highest to lowest:
- MaxKey (internal type).
- Regular expression.
- Timestamp.
- Date.
- Boolean.
- ObjectId.
- BinData.
- Array.
- Object.
- Symbol, string.
- Numbers (ints, longs, doubles).
- Null.
- MinKey (internal type).
Non-existent fields get sorted as if they have null in the respective field. Comparing arrays is a bit more complex. An ascending order of comparison (or <) will compare the smallest element of each array. A descending order of comparison (or >) will compare the largest element of each array.
For example, see the following scenario:
> db.types.find()
{ "_id" : ObjectId("5908d58455454e2de6519c49"), "a" : [ 1, 2, 3 ] }
{ "_id" : ObjectId("5908d59d55454e2de6519c4a"), "a" : [ 2, 5 ] }
In ascending order, this is as follows:
> db.types.find().sort({a:1})
{ "_id" : ObjectId("5908d58455454e2de6519c49"), "a" : [ 1, 2, 3 ] }
{ "_id" : ObjectId("5908d59d55454e2de6519c4a"), "a" : [ 2, 5 ] }
Whereas in descending order it is as follows:
> db.types.find().sort({a:-1})
{ "_id" : ObjectId("5908d59d55454e2de6519c4a"), "a" : [ 2, 5 ] }
{ "_id" : ObjectId("5908d58455454e2de6519c49"), "a" : [ 1, 2, 3 ] }
The same applies when comparing an array with a single number value, as illustrated in the following example.
Inserting a new document with an integer value of 4:
> db.types.insert({"a":4})
WriteResult({ "nInserted" : 1 })
Descending sort:
> db.types.find().sort({a:-1})
{ "_id" : ObjectId("5908d59d55454e2de6519c4a"), "a" : [ 2, 5 ] }
{ "_id" : ObjectId("5908d73c55454e2de6519c4c"), "a" : 4 }
{ "_id" : ObjectId("5908d58455454e2de6519c49"), "a" : [ 1, 2, 3 ] }
Ascending sort:
> db.types.find().sort({a:1})
{ "_id" : ObjectId("5908d58455454e2de6519c49"), "a" : [ 1, 2, 3 ] }
{ "_id" : ObjectId("5908d59d55454e2de6519c4a"), "a" : [ b, 5 ] }
{ "_id" : ObjectId("5908d73c55454e2de6519c4c"), "a" : 4 }
In each case, we highlighted the values being compared in bold.
- Go Machine Learning Projects
- 腦動力:C語言函數速查效率手冊
- 條碼技術及應用
- 數控銑削(加工中心)編程與加工
- 機艙監測與主機遙控
- PostgreSQL Administration Essentials
- 構建高性能Web站點
- 塊數據5.0:數據社會學的理論與方法
- TensorFlow Reinforcement Learning Quick Start Guide
- PowerPoint 2010幻燈片制作高手速成
- PHP求職寶典
- Wireshark Revealed:Essential Skills for IT Professionals
- 大數據:從基礎理論到最佳實踐
- Flink內核原理與實現
- 細節決定交互設計的成敗