2012-01-30 78 views
21

我试图使用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); 

当我结合$设置和$推入通过BasicDBList相同的更新,我得到一个IllegalArgumentException:“存储在数据库中的字段不能启动'$'(Bad Key:'$ push')“。

如果我做两个单独的更新,则pushUpdate和setUpdate都会生成有效的结果。

谢谢!

回答

40

我不知道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); 

而你的代码生成(我怀疑),这将产生的

db.collection.update({_id: pageId}, {$push: {values: dboVital}, $set: {endTime: time}}); 

相当于此:

db.collection.update({_id: pageId}, [{$push: {values: dboVital}}, {$set: {endTime: time}}]); 
+1

这就是它!非常感谢! – HolySamosa 2012-01-30 21:54:36

相关问题