Mongodb - updateOne在jmeter中使用java时更改文件类型并覆盖其他数据

sbtkgmzw  于 2023-03-28  发布在  Java
关注(0)|答案(1)|浏览(104)

我在性能测试中使用jMeter,需要更改mongodb文档中的一些数据。我遇到了一个问题,在使用updateOne命令时,将工作mongosh查询转换为java,jmeter/java中的行为不同。
我需要修改的字段嵌套在object中,object又嵌套在array中,array又嵌套在object中(图1)。
image 1: Data structure as seen in MongoDBCompass
我需要将'number'字段的值更改为我的一个jmeter值的值。在mongodbcompass中,当我使用这样的脚本时,它可以完美地工作:

db.process.updateOne({_id: "01deda7ec9894a3cbdeb"},
      {$set: {
        "individualPerson.identityDocuments.0.number": "ZZA002204"
      }}

    )

但是当在jmeter中使用这个java代码时(java/groovy)会覆盖Object中的所有内容,并将individualPerson的数据类型从Array更改为Object(图2)
(collection是变量的名称,它指向进程集合)

collection.updateOne(Filters.eq("_id", 01deda7ec9894a3cbdeb), Updates.set("individualPerson.identityDocuments.0.number", "abc123456")

image 2: Data after changing it with jmeter/java
在使用jmeter时,如何正确更改它?
我试过将java数组传入updateone方法,但它没有更新任何东西。我也试过使用java将mongosh查询发送到mongodb,但它也不起作用

icnyk63a

icnyk63a1#

您应该先尝试一个过滤器,然后使用更新后的文档进行覆盖,类似这样

Document filter = new Document("_id", "01deda7ec9894a3cbdeb");

Document update = new Document("$set", new Document("individualPerson.identityDocuments.0.number", "abc123456"));

collection.updateOne(filter, update);

相关问题