我正在尝试使用 map 作为值来更新 mongoDB。该映射包含一个包含“$”字符的键。
我收到以下错误:
java.lang.IllegalArgumentException: fields stored in the db can't start with '$' (Bad Key: '$format')
我的代码是:
DB db = new MongoPersistenceManagerImpl().getDB();
DBObject q = new BasicDBObject();
DBObject u = new BasicDBObject();
u.put("details", details);
DBCollection collection = db.getCollection(COLLECTION_NAME);
WriteResult result = collection.update(q, u, true, false);
详细信息在哪里
private Map<String, Object> details;
“详细信息”映射中的键之一包含“$”,这不允许我使用上述错误更新 mongoDB。
key 如下所示:
http://example.com?$format
请提供解决此问题的指示。
最佳答案
$
是 mongodb 中的运算符前缀,您可以使用诸如 $set
、$in
、$ne
等运算符> 等...
这就是你不能在 mongo db 中使用以 $
开头的变量的原因。想想看,它怎么知道你是想使用名为 $myValue
的运算符还是仅使用值 $myVakue
?它不能,这与您不能在 java myVar()
或 77Var
中命名变量的原因相同。
如果你打算保存http地址,我会对它进行html编码
编辑:
顺便说一句,您的有问题的值不是您所说的http地址,而是它的$format
,并且正如错误所示,您的值以$
开头 ,您始终可以存储不以 $
关于java - 使用 Map 值更新 mongodb,该值包含 JAVA 中 '$' 的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21370657/