当前位置: 首页 > 面试题库 >

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

米楚青
2023-03-14
问题内容

我正在尝试使用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:“存储在db中的字段不能以’$’开头(错误键:’$ push’)”。

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

谢谢!


问题答案:

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


 类似资料:
  • 本文向大家介绍mongodb 修改器($inc/$set/$unset/$push/$pop/upsert),包括了mongodb 修改器($inc/$set/$unset/$push/$pop/upsert)的使用技巧和注意事项,需要的朋友参考一下 对于文档的更新除替换外,针对某个或多个文档只需要部分更新可使用原子的更新修改器,能够高效的进行文档更新。更新修改器是中特殊的键, 用来指定复杂的操作

  • 问题内容: 在产品集合中,我有一个nearviews数组,其中有2个fieldsbyBy和viewedDate。 在一种情况下,如果我已经有记录,那么我需要对其进行更新。例如,如果我有这样的数组: 用户是,所以我需要更新以上&如果没有记录,我必须要更新。 我尝试如下: 上面的查询将删除我在Array中的所有其他元素。 问题答案: 实际上,按照您说的去做并不是一个单一的操作,但是我将逐步介绍所需的步

  • 我的应用程序 使用和。每个都显示一个,其中包含、一个和一个。如果6个中有3个被检查,则和应更新为3%。 问题 文本视图和进度条无法正确显示更新。我记录了计算的进度值以及 有两个问题: 1.)进度值与< code>tv.getText()和< code>pb.getProgress()的值不相等。< code>tv.getText()和< code>pb.getProgress()返回的值总是高或低

  • 问题内容: 我想获取更新的文档。这是我的原始代码,它成功更新但没有返回文档。 我使用了toArray函数,但是这给出了错误“没有提供的回调就不能使用writeConcern”: 有任何想法吗? 问题答案: 只会向自己的回调报告受影响的文档数。 要在修改时检索文档,可以改用(以前称为)。 更新:在mongoDB中执行时,请使用;如果使用mongoose,则可以使用。以上是Node.js驱动程序。 注

  • 本文向大家介绍使用$ set和location $运算符更新数组中的特定MongoDB文档?,包括了使用$ set和location $运算符更新数组中的特定MongoDB文档?的使用技巧和注意事项,需要的朋友参考一下 要使用$set和positional运算符更新数组中的特定文档,请使用MongoDB 。该基于查询过滤器集合中更新单个文件。 让我们创建一个包含文档的集合- 在方法的帮助下显示集合

  • 问题内容: 在同一张表上更新后,如何在触发器中更新表的列? 这是触发条件: 现在当我像这样更新表时 这不起作用,因为我得到以下信息: 那么我到底该如何工作呢? 问题答案: 如果将触发器更改为而不是,可以这样操作: