如何使用R语言的mongolite更新MongoDB中的布尔值
解决mongolite更新MongoDB布尔值时类型转换问题
我明白你遇到的困扰——用R的mongolite包更新MongoDB字段时,R中的FALSE被转成了字符串类型的"FALSE",而不是MongoDB原生的布尔类型false。这是因为R的逻辑类型和MongoDB的布尔类型在默认序列化过程中存在类型映射的问题,直接传入R的布尔值会被当成字符串处理。
这里有两个可靠的解决方法,帮你把R的布尔值正确转换成MongoDB的布尔类型:
方法一:使用mongolite::mongo.bool()显式指定类型
mongolite专门提供了mongo.bool()函数来生成MongoDB兼容的布尔值,它会告诉序列化器要生成原生布尔类型,而不是字符串。
比如你之前的更新代码可能是这样的:
# 错误示例:会把FALSE转成字符串 your_collection$update( query = list("_id" = ObjectId("目标文档ID")), update = list("$set" = list(your_field = FALSE)) )
改成下面的写法,用mongo.bool()包装你的布尔值:
# 正确示例:生成MongoDB原生布尔类型false your_collection$update( query = list("_id" = ObjectId("目标文档ID")), update = list("$set" = list(your_field = mongo.bool(FALSE))) )
方法二:用jsonlite::unbox()处理单个布尔值
如果你的场景中更依赖jsonlite的序列化逻辑,可以用unbox()函数把单个布尔值从R的列表元素中"解包",避免被序列化为数组或字符串:
library(jsonlite) your_collection$update( query = list("_id" = ObjectId("目标文档ID")), update = list("$set" = list(your_field = unbox(FALSE))) )
执行完上面任意一种方法的更新后,去MongoDB中查看目标字段,就能看到它已经变成原生的布尔类型false,而不是字符串"FALSE"了。
内容的提问来源于stack exchange,提问作者Nirmal_stack
相关产品推荐
相关产品推荐

