官术网_书友最值得收藏!

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:

  1. MaxKey (internal type).
  2. Regular expression.
  3. Timestamp.
  4. Date.
  5. Boolean.
  6. ObjectId.
  7. BinData.
  8. Array.
  9. Object.
  10. Symbol, string.
  11. Numbers (ints, longs, doubles).
  12. Null.
  13. 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.

主站蜘蛛池模板: 福安市| 偃师市| 湖南省| 孝感市| 稷山县| 阳江市| 澄城县| 富锦市| 河南省| 年辖:市辖区| 瑞丽市| 寻甸| 吉水县| 桂平市| 鲁甸县| 乌拉特后旗| 达州市| 吉木萨尔县| 兴宁市| 崇阳县| 漯河市| 茂名市| 烟台市| 绍兴县| 宜兰市| 班玛县| 八宿县| 河源市| 南城县| 阳城县| 临潭县| 濮阳县| 买车| 雷州市| 临城县| 长顺县| 沭阳县| 宜兰市| 敦化市| 安庆市| 伽师县|