Hol*_*osa 28 java mongodb mongo-java
我正在尝试使用MongoDB的Java驱动程序在同一操作中对记录进行两次更新($ set和$ push).我使用的代码类似于以下内容:
BasicDBObject pushUpdate = new BasicDBObject().append("$push", new BasicDBObject().append("values", dboVital));
BasicDBObject setUpdate = new BasicDBObject().append("$set", new BasicDBObject().append("endTime", time));
BasicDBList combinedUpdate = new BasicDBList();
combinedUpdate.add( pushUpdate);
combinedUpdate.add( setUpdate);
collection.update( new BasicDBObject().append("_id", pageId), combinedUpdate, true, false);
Run Code Online (Sandbox Code Playgroud)
当我通过BasicDBList将$ set和$ push组合到同一个更新中时,我得到一个IllegalArgumentException:"存储在db中的字段不能以'$'开头(Bad Key:'$ push')".
如果我进行两次单独的更新,则pushUpdate和setUpdate都会生成有效结果.
谢谢!
Ser*_*sev 50
我不懂Java驱动程序,但你必须在那里创建一个列表吗?如果您尝试此代码会发生什么?
BasicDBObject update = new BasicDBObject().append("$push", new BasicDBObject().append("values", dboVital));
update = update.append("$set", new BasicDBObject().append("endTime", time));
collection.update( new BasicDBObject().append("_id", pageId), update, true, false);
Run Code Online (Sandbox Code Playgroud)
这应该产生相当于
db.collection.update({_id: pageId}, {$push: {values: dboVital}, $set: {endTime: time}});
Run Code Online (Sandbox Code Playgroud)
你的代码产生(我怀疑)这个:
db.collection.update({_id: pageId}, [{$push: {values: dboVital}}, {$set: {endTime: time}}]);
Run Code Online (Sandbox Code Playgroud)