java - 需要 Mongodb 的帮助 - 使用 "$pull"和 vertx mongoclient 在数组内直接更新文档

标签 java mongodb vert.x

我有一个棘手的查询,用于从数组内的子文档中删除元素。我想出了直接更新查询来执行它在命令行中运行良好的操作。

Document: 

{
  "_id": "1234",
  "fruits": {
    "fruits": [
      {
        "fruitName": "appl",
        "state": "rotten",
        "colour": "red"
      },
      {
        "fruitName": "mango",
        "state": "good",
        "colour": "orange"
      }
    ]
  }
}

Query: working in cli and successfully remove the element from array.

db.getCollection('mycollection').update(
{'fruits.fruits.fruitName' : 'appl'},
{ $pull: { 'fruits.fruits': { 'state': 'rotten' } }},
{ multi: true }
);

我应该如何在 vertx mongoclient 或 mongo java 驱动程序中编写相同的查询?

最佳答案

您只需获取该 cli 查询并对其进行转换,以便可以使用 vertx-mongo-driver 执行它。它看起来像这样:

JsonObject query = new JsonObject().put("fruits.fruits.fruitName", "apple");
JsonObject update = new JsonObject().put("$pull",
  new JsonObject().put("fruits.fruits",
    new JsonObject().put("state","rotten")));
mongo.updateCollectionWithOptions("myCollection", query, update, new UpdateOptions().setMulti(true), res ->{
  if(res.succeeded()){
    //do something with the result
  }
});

关于java - 需要 Mongodb 的帮助 - 使用 "$pull"和 vertx mongoclient 在数组内直接更新文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57949178/

相关文章:

java - 用新的 JButton 替换旧的 JButton

mongodb - MongoDB 支持的最大数据库数

javascript - 更新 mongodb 中的聚合结果?

Javascript 参数作为未定义传递

Reactive SQL 客户端 (Quarkus/Vert.X) 中的 Kotlin 协程事务

java - 定义@Asynchronous方法时指定一个WorkManager

java - ListView setOnItemClickListener 不适用于 Switch 小部件

java - 有没有办法模块化 JavaFX 应用程序?

hazelcast - Vert.X 与 Hazelcast

java - 如何在 AsynchronousSocketChannel 上正确同步并发读取和写入