$push 和 $set 在同一个 MongoDB 更新中

新手上路,请多包涵

我正在尝试使用 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 将 \(set 和 \)push 组合到同一个更新中时,我得到一个 IllegalArgumentException:“存储在数据库中的字段不能以 ‘\(' 开头(坏键:'\)push’)”。

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

谢谢!

原文由 HolySamosa 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 852
2 个回答

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

原文由 Sergio Tulentsev 发布,翻译遵循 CC BY-SA 3.0 许可协议

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);

原文由 SHAIKH SOHEL FATTARU 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题