蒙戈。如何检查字段是否为数字

时间:2013-05-03 11:04:22

标签: mongodb mongodb-query

如何选择字段为数字的mongodb文档?

该字段内容的一些示例:“2”,“a”,“Z”,3

6 个答案:

答案 0 :(得分:27)

您可以使用$type运算符根据字段的BSON类型进行选择,这样可以获得您想要的结果。

所以,例如,找到所有字符串:

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

或者,为了找到所有双打(由于默认的Javascript行为,通常是从shell中存储的数字),您将使用:

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

由于有两种类型的整数(可能),你需要使用这样的东西:

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

最后,获取所有数字,整数或双数:

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

答案 1 :(得分:14)

您可以使用

输入字段bar的类型
typeof db.foo.findOne().bar

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

答案 2 :(得分:5)

您可以使用别名“number”代替:

np.vstack((queu, new_path))

答案 3 :(得分:2)

mongo中的

typeof也会为object类型返回array。要检查字段是否为Number,请运行以下查询以查看是否返回任何结果。

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

您还可以看到https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/toString

答案 4 :(得分:0)

使用mongodb 4.4 (即将推出),您可以使用$isNumber管道运算符来检查表达式是整数还是其他BSON类型。

db.collection.aggregate([
  { "$project": {
    "field": { "$isNumber": "$field" }
  }}
])

仅获取所选文档

db.collection.find({ "$expr": { "$anyElementTrue": { "$isNumber": "$field" }}})

答案 5 :(得分:0)

当前答案完全有效

关于类型/编号/别名的完整表格在BSON Types

现在,根据 $type 文档

目前的解决方案

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

可以改进(由我自己测试)到以下几点:

//based on 'Number' - see BSON Types
db.collection.find({ "field": { $type: [1, 16, 18] } })

//based on 'Alias' BSON Types
db.collection.find({ "field": { $type: ["double", "int", "long"] } })

因此可以避免使用 $or 并多次重复 same field 名称