Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MongoTemplate更新为同一文档在数组中设置多个对象_Java_Mongodb_Mongotemplate - Fatal编程技术网

Java MongoTemplate更新为同一文档在数组中设置多个对象

Java MongoTemplate更新为同一文档在数组中设置多个对象,java,mongodb,mongotemplate,Java,Mongodb,Mongotemplate,我有一个端点,它接受一个文档ID,还有一个嵌套数组中的Employee对象,我想更新它。这很好用。我试图修改端点以容纳多个员工,并让它一次更新所有员工,但无法使其工作。我不确定我是否把格式弄错了,或者这是不可能的 更详细地说,我的人口普查是一个已经存在的对象,如下所示,列表中有10名员工: { "id": <ID> ... "employeeList": [ { "employeeId": <Employee_ID>, ... }

我有一个端点,它接受一个文档ID,还有一个嵌套数组中的Employee对象,我想更新它。这很好用。我试图修改端点以容纳多个员工,并让它一次更新所有员工,但无法使其工作。我不确定我是否把格式弄错了,或者这是不可能的

更详细地说,我的人口普查是一个已经存在的对象,如下所示,列表中有10名员工:

{
  "id": <ID>
  ...
  "employeeList": [
  {
    "employeeId": <Employee_ID>,
    ...
  }
  ...
  ]
}
当我试图更新它以一次完成所有任务时,那是行不通的。我现在意识到我的方法没有真正的意义,所以我不会发布它(基本上围绕着.addCriteria和update.set在for循环中为所提供列表中的每个员工执行)。出现如下错误:“由于com.mongodb.BasicDocument的限制,无法添加第二个'employeeList.employeeId'条件”


我能做吗?是唯一一个连续多次更新此文档的选项吗?我认为这样做比调用端点X次要好。我在Mongo3.6上,以防影响任何答案。TIA。

对不起,您的帖子不清楚。显示数组字段EmployeeList-是否尝试向数组中添加值?是单个文档还是所有文档


如果不向该现有数组字段添加值,那么您是否要向所有文档添加新字段?

很抱歉,您的帖子不清楚。显示数组字段EmployeeList-是否尝试向数组中添加值?是单个文档还是所有文档


如果不向该现有数组字段添加值,那么您是否正在寻求向所有文档添加新字段?

以下是字段更新的示例:poster 对于所选标题:

db.movieDetails.updateOne(
{标题:“火星人”},
{$set:{海报:“}}


还有一个更新,您可以查看Mongo的在线手册……

这里是一个更新字段的示例:海报 对于所选标题:

db.movieDetails.updateOne(
{标题:“火星人”},
{$set:{海报:“}}


还有一个更新,你可以查看Mongo的在线手册……

我找不到任何其他问题的答案。因此,我最终将其改为批量更新方法:

BulkOperations bulkOps = mongoTemplate.bulkOps(BulkMode.UNORDERED, Census.class);
for(Employee employee : employeeList) {
    Query query = new Query().addCriteria(new Criteria("id").is(id));
    Update update = new Update().set("employeeList.$", employee);
    bulkOps.updateOne(query, update);
}
BulkWriteResult results = bulkOps.execute();

它并没有真正解决多次更新同一文档的问题,但目前它对我来说很有效。

我找不到任何其他问题的答案。因此,我最终将其改为批量更新方法:

BulkOperations bulkOps = mongoTemplate.bulkOps(BulkMode.UNORDERED, Census.class);
for(Employee employee : employeeList) {
    Query query = new Query().addCriteria(new Criteria("id").is(id));
    Update update = new Update().set("employeeList.$", employee);
    bulkOps.updateOne(query, update);
}
BulkWriteResult results = bulkOps.execute();

它并不能真正解决多次更新同一文档的问题,但它现在对我来说很有效。

不,我想在这种情况下,我会使用update.push。我正在尝试使用$set根据EmployeeID获取现有员工,并使用一些新信息(例如:姓名等)对其进行更新。不,我认为在这种情况下,我将使用update.push。我正试图使用$set通过EmployeeID获取现有员工,并用一些新信息(例如:姓名等)对其进行更新。这有点编辑上的问题-它应该是一组带有结尾的代码)这不是使用MongoTemplate(或spring boot附带的其他包)的Java代码。它也没有回答我关于使用$set操作符同时更新多个数组对象的问题。在这方面有点编辑问题-应该是一组代码,带有一个结束符)这不是使用MongoTemplate(或spring boot附带的其他包)的Java代码。它也没有回答我关于使用$set操作符同时更新多个数组对象的问题。