Casbah:当字段名称有空格时如何更新和嵌入对象?

时间:2012-09-16 18:05:04

标签: mongodb casbah

假设我在数据库中有以下文档:

{"_id":"test", "with space":{"a name":1}}

如何在Casbah中编写$ set查询以更新“with space”。“a name”to 2?

我正在思考以下几点:

collection.update(MongoDBObject("_id" -> "test"), "'with space'.'a name'" $set 2)

但是如果我的字段名称未知且我必须在运行时编写它们怎么办?有没有办法以安全的方式“逃脱”他们? (例如,如果其中任何一个包含单引号,等等。)

2 个答案:

答案 0 :(得分:3)

如何不在字段名称中添加空格。严重。

好的,如果你真的必须,它应该可以正常运行而不逃避...

collection.update(MongoDBObject("_id" -> "test"), $set ("with space.a name" -> 2))

答案 1 :(得分:2)

MongoDB没有任何明确的转义;你可以传递一个变量名,例如:

 val key = MongoDBObject(name + '.' + embeddedname -> "somevalue")

 val key = MongoDBObject("with space.a name" -> "somevalue")

虽然MongoDB允许您在除“。”之外的密钥名称中使用任何有效的UTF-8字符。和一个领先的'$',你通常最好坚持使用字母数字键和下划线。

如果您担心用户提供的输入的安全性,请参阅How does MongoDB address SQL or Query injection?