0

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

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

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

我在想一些事情:

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

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

4

2 回答 2

3

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

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

collection.update(MongoDBObject("_id" -> "test"), $set ("with space.a name" -> 2))
于 2012-09-16T21:25:22.077 回答
2

MongoDB 不需要任何显式转义;你可以只传递一个变量名,例如:

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

或者

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

虽然 MongoDB 确实允许您在键名中使用任何有效的 UTF-8 字符,但 '.' 除外。和前导“$”,您通常最好坚持使用字母数字键名加下划线。

如果您担心用户提供的输入的安全性,请参阅MongoDB 如何解决 SQL 或查询注入?

于 2012-09-16T23:52:09.487 回答