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