获取存储在 MongoDB at mongo shell 中的 BSON 类型的文档字段
Getting BSON type of document field stored in MongoDB at mongo shell
我的 MongoDB 数据库中有两个文档。它们是(简化):
{
"_id" : "ONE",
"items": [
42,
0
]
}
{
"_id" : "TWO",
"items": [
0,
0
]
}
它们是由客户端应用程序创建的(即不使用 MongoDB shell)我怀疑其行为(我的意思是,该应用程序可能有错误,我正在尝试调试它)。
我怀疑文档 ONE
中的数字 items
在 BSON 级别编码为 32 位整数(即 BSON type 16) while in document TWO
they are encoded in double (i.e. BSON type 1)
我尝试使用 MongoDB shell 中 JavaScript 中的常用 typeof
运算符来检查它,但似乎他们没有检测到任何差异:
> typeof db.entities.find({_id: "ONE"})[0].items[0]
number
> typeof db.entities.find({_id: "ONE"})[0].items[1]
number
> typeof db.entities.find({_id: "TWO"})[0].items[0]
number
> typeof db.entities.find({_id: "TWO"})[0].items[1]
number
是否有任何精确的方法可以知道来自 MongoDB shell 的 MongoDB 文档的给定片段的 BSON 类型?
提前致谢!
您可以使用 aggregate with $type
你的理解并不完全正确。 Mongo 默认情况下将数字视为双数。
看下面的例子,我强制加上一个整数然后它说它是整数。它不打印类型编号但类型名称
db.collection.aggregate([
{
"$unwind": "$items" //Denormalized
},
{
"$addFields": {
"x": {//All docs will have this - For demo purpose
"$toInt": "11"
}
}
},
{
"$project": {
"t": {
"$type": "$items" //Each element in the items - after denormalising
},
"t1": {
"$type": "$x" //Type of newly added element
}
}
}
])
我的 MongoDB 数据库中有两个文档。它们是(简化):
{
"_id" : "ONE",
"items": [
42,
0
]
}
{
"_id" : "TWO",
"items": [
0,
0
]
}
它们是由客户端应用程序创建的(即不使用 MongoDB shell)我怀疑其行为(我的意思是,该应用程序可能有错误,我正在尝试调试它)。
我怀疑文档 ONE
中的数字 items
在 BSON 级别编码为 32 位整数(即 BSON type 16) while in document TWO
they are encoded in double (i.e. BSON type 1)
我尝试使用 MongoDB shell 中 JavaScript 中的常用 typeof
运算符来检查它,但似乎他们没有检测到任何差异:
> typeof db.entities.find({_id: "ONE"})[0].items[0]
number
> typeof db.entities.find({_id: "ONE"})[0].items[1]
number
> typeof db.entities.find({_id: "TWO"})[0].items[0]
number
> typeof db.entities.find({_id: "TWO"})[0].items[1]
number
是否有任何精确的方法可以知道来自 MongoDB shell 的 MongoDB 文档的给定片段的 BSON 类型?
提前致谢!
您可以使用 aggregate with $type
你的理解并不完全正确。 Mongo 默认情况下将数字视为双数。
看下面的例子,我强制加上一个整数然后它说它是整数。它不打印类型编号但类型名称
db.collection.aggregate([
{
"$unwind": "$items" //Denormalized
},
{
"$addFields": {
"x": {//All docs will have this - For demo purpose
"$toInt": "11"
}
}
},
{
"$project": {
"t": {
"$type": "$items" //Each element in the items - after denormalising
},
"t1": {
"$type": "$x" //Type of newly added element
}
}
}
])