23

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

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

4

6 回答 6

47

您可以使用$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 }}]})
于 2013-05-03T11:14:32.107 回答
17

bar您可以使用字段的类型

typeof db.foo.findOne().bar

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

于 2014-01-17T06:47:22.650 回答
8

您可以改用别名“number”:

{ field: {$type:"number"}}
于 2016-12-24T15:17:25.347 回答
2

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

于 2016-05-04T07:40:41.817 回答
1

当前答案完全有效

关于类型/编号/别名的完整表格在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的名称

于 2021-05-21T23:53:27.367 回答
0

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

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

并且只获取选定的文档

db.collection.find({ "$expr": { "$anyElementTrue": { "$isNumber": "$field" }}})
于 2020-04-27T05:54:05.770 回答