原始数据是:
{"u":1}
' u'是Int。 在mongod控制台中运行命令之后:
update({},{$set:{"u":0}})
find({})
数据确实成了
{"u":0}
看起来很不错。但是当我使用C ++驱动程序读取它们时:
bson.getIntField("u")
崩溃。原因是类型' u'是双倍的!这意味着mongod的更新命令会无声地改变你的类型。
为什么呢?以及如何防止这种情况?
P.S mongodb版本是2.6.6 linux
答案 0 :(得分:2)
插入任何数值或"更改"默认为Double
。对于其他"类型"使用NumberInt()
或NumberLong()
表示您希望在C ++或其他类型敏感代码中阅读的相应类型:
update({},{ "$set":{ "u": NumberInt(0) }})
或:
update({},{ "$set":{ "u": NumberLong("0") }})