我必须在字段的类型上查询我的MongoDB数据库
这是我的收藏集user
的文件:
在MongoDB中,有一个可用的BSON类型及其相应数字的表。例如:
1 -> Double
2 -> String
3 -> Object
4 -> Array
......
......
......
$type
选择字段值为指定数字BSON类型实例的文档:
{ field: { $type: <BSON type> } }
因此,例如使用此查询:
db.user.find({ street: { $type: 2 }})
我得到的所有文件都包含一个字符串street
字段。
简而言之,这个介绍
假设我想知道哪个是street
字段的类型。
在这种情况下,我必须查询我的数据库,直到我得到一些文件:
db.user.find({ street: { $type: 1 }})
db.user.find({ street: { $type: 2 }})
db.user.find({ street: { $type: 3 }})
db.user.find({ street: { $type: 4 }})
.......
.......
.......
因此,我必须使用相同的查询更改类型编号来查询我的数据库很多次。
是否有其他可能性可以知道哪个是超出前一个字段的类型?
答案 0 :(得分:0)
您可以尝试使用此工具variety - MongoDB的架构分析器。
说出你的数据:
db.users.insert({name: "Tom", bio: "A nice guy.", pets: ["monkey", "fish"], someWeirdLegacyKey: "I like Ike!"});
db.users.insert({name: "Dick", bio: "I swordfight.", birthday: new Date("1974/03/14")});
db.users.insert({name: "Harry", pets: "egret", birthday: new Date("1984/03/14")});
db.users.insert({name: "Geneviève", bio: "Ça va?"});
db.users.insert({name: "Jim", someBinData: new BinData(2,"1234")});
使用:
$ mongo test --eval "var collection = 'users'" variety.js
输出:
+------------------------------------------------------------------+
| key | types | occurrences | percents |
| ------------------ | ------------ | ----------- | -------- |
| _id | ObjectId | 5 | 100.0 |
| name | String | 5 | 100.0 |
| bio | String | 3 | 60.0 |
| birthday | String | 2 | 40.0 |
| pets | Array(4),String(1) | 5 | 40.0 |
| someBinData | BinData-old | 1 | 20.0 |
| someWeirdLegacyKey | String | 1 | 20.0 |
+------------------------------------------------------------------+
答案 1 :(得分:0)
这将按字段类型分组。
db.collection.aggregate(
[
{
$group :
{
_id :
{ "$type": "$yourkey" },
num : {$sum : 1}
}
}
])