我正在尝试使用地图作为值更新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。
密钥如下:
http://example.com?$format
请提供解决此问题的指示。
答案 0 :(得分:1)
$
是mongodb中的运算符前缀,您有$set
,$in
,$ne
等运算符...
这就是你不能在mongo db中使用以$
开头的变量的原因。想一想,它怎么知道你是想要使用名为$myValue
的运算符还是仅使用值$myVakue
?它不能,这就是为什么你不能在java myVar()
或77Var
中命名变量的原因。
如果您打算保存http地址,我会对其进行html编码
编辑:
顺便说一下,你的问题值不是你所说的http地址,而是它的$format
,而且如错误所示,你的值以$
开始,你可以随时存储字符串不是以$