假设我在数据库中有以下文档:
{"_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)
但是如果我的字段名称未知且我必须在运行时编写它们怎么办?有没有办法以安全的方式“逃脱”他们? (例如,如果其中任何一个包含单引号,等等。)
答案 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?