MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Suche nach $type-Nummer in Mongodb

Es gibt nur einen numerischen Typ in JavaScript (Number ), die binär als IEEE 754-Gleitkommazahl (double) dargestellt wird.

In der BSON-Spezifikation dies wird als Double (Typ 1) dargestellt, also sollten Sie in der Lage sein, mit:

zu finden
db.people.find({name: { $type: 1 }})

Es gibt einige mongo Shell-Helfer, wenn Sie verschiedene BSON-Datentypen einfügen möchten :

42              // Type 1:  double (64-bit IEEE 754 floating point, 8 bytes)
NumberInt(42)   // Type 16: int32  (32-bit signed integer, 4 bytes)
NumberLong(42)  // Type 18: int64  (64-bit signed integer, 8 bytes)

Also zum Beispiel:

db.people.insert({ name: 'default', num: 42 })
db.people.insert({ name: 'NumberLong', num: NumberLong(42) })
db.people.insert({ name: 'NumberInt', num: NumberInt(42) })

Die verschiedenen numerischen Darstellungen stimmen immer noch überein, wenn Sie find() ausführen auf eine Zahl, die in mehreren Formaten dargestellt werden kann (d. h. eine 32-Bit-Ganzzahl kann auch als Double oder int64 dargestellt werden).

Zum Beispiel:

db.people.find({num:42})
{
    "_id" : ObjectId("50965aa3038d8c8e85fd3f45"),
    "name" : "default",
    "num" : 42
}
{
    "_id" : ObjectId("50965aa3038d8c8e85fd3f46"),
    "name" : "NumberLong",
    "num" : NumberLong(42)
}
{
    "_id" : ObjectId("50965aa3038d8c8e85fd3f47"),
    "name" : "NumberInt",
    "num" : 42
}

Wenn Sie jedoch nach $type suchen , die BSON-Darstellung ist anders:

> db.people.find({num: { $type: 1 }})
{
    "_id" : ObjectId("50965aa3038d8c8e85fd3f45"),
    "name" : "default",
    "num" : 42
}

> db.people.find({num: { $type: 16 }})
{
    "_id" : ObjectId("50965aa3038d8c8e85fd3f47"),
    "name" : "NumberInt",
    "num" : 42
}

> db.people.find({num: { $type: 18 }})
{
    "_id" : ObjectId("50965aa3038d8c8e85fd3f46"),
    "name" : "NumberLong",
    "num" : NumberLong(42)
}