web-dev-qa-db-fra.com

Mongo. comment vérifier si le champ est un nombre

Comment sélectionner les documents mongodb où le champ est un nombre?

Quelques exemples du contenu de ce champ: "2", "a", "Z", 3

16
Andrei

Vous pouvez utiliser l'opérateur $ type pour sélectionner en fonction du type BSON du champ, ce qui devrait vous donner ce que vous voulez.

Ainsi, par exemple, pour trouver toutes les chaînes:

db.collection.find( { field: { $type : 2 } } )

Ou, pour trouver tous les doubles (qui sont généralement les numéros stockés à partir du shell grâce au comportement Javascript par défaut), vous utiliseriez:

db.collection.find( { field: { $type : 1 } } )

Puisqu'il y a deux types d'entiers (potentiellement), vous devrez utiliser quelque chose comme ceci:

db.collection.find({$or : [{"field" : { $type : 16 }}, {"field" : { $type : 18 }}]})

Enfin, pour obtenir tous les nombres, entiers ou doubles:

db.collection.find({$or : [{"field" : { $type : 1 }}, {"field" : { $type : 16 }}, {"field" : { $type : 18 }}]})
35
Adam Comerford

Vous pouvez le type d'un champ bar en utilisant

typeof db.foo.findOne().bar

http://docs.mongodb.org/manual/core/Shell-types/#check-types-in-Shell

17
ebr

vous pouvez utiliser l'alias "nombre" à la place:

{ field: {$type:"number"}}
7
Youssef Youssef

typeof dans mongo renvoie également object pour le type array. Pour vérifier si un champ est un Number, exécutez la requête ci-dessous pour voir s'il renvoie un résultat.

db.foo.find('Object.prototype.toString.call(this.bar) === "[object Number]"')

Vous pouvez également voir https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/toString

2
Tarun Vashisth