如何选择字段为数字的mongodb文档?
该字段内容的一些示例:“2”,“a”,“Z”,3
答案 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)
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
名称