如何选择字段为数字的mongodb文档?
该字段内容的一些示例:“2”、“a”、“Z”、3
您可以使用$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 }}]})
bar
您可以使用字段的类型
typeof db.foo.findOne().bar
http://docs.mongodb.org/manual/core/shell-types/#check-types-in-shell
您可以改用别名“number”:
{ field: {$type:"number"}}
typeof
在 mongo 中也返回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
当前答案完全有效
关于类型/编号/别名的完整表格在BSON 类型中
现在,根据$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
和重复多次相同 field
的名称
随着 mongodb 4.4(即将推出),您可以使用$isNumber
管道运算符来检查表达式是整数还是其他 BSON 类型。
db.collection.aggregate([
{ "$project": {
"field": { "$isNumber": "$field" }
}}
])
并且只获取选定的文档
db.collection.find({ "$expr": { "$anyElementTrue": { "$isNumber": "$field" }}})