【发布时间】:2018-06-12 07:32:33
【问题描述】:
想了解如何在 MongoDB 中的给定文档的数组中执行 upsert 操作。
我有以下 json 文档
{
"firstName": "John",
"lastName": "Paul",
"contact": {
"contactGroup":"Business",
"myContacts": [{
"name": "Jeff",
"phone": "222 - 572 - 8754"
},
{
"name": "Joe",
"phone": "456 - 875 - 4521"
}
]
}
}
我想在以下级别执行 upsert 操作:
- 名字
- myContacts 数组
下面是我编写的代码 sn-p。目前,我正在为 myContacts 使用 MongoDB 的 addtoSet 运算符,但该行为似乎只向数组添加一个值,除非该值已经存在。
人物类:
@Document
public class Person{
@Id
private String id;
private String firstName;
private String lastName;
private Contact contact;
//Setter and Getter methods
}
联系人类:
public class Contact{
private String contactGroup;
private List<MyContacts> myContacts;
//Setter & Getter methods
}
MyContacts 类:
public class MyContacts{
private String contactName;
private String contactPhone;
//Setter and Getter methods
}
联系人更新:
public class ContacsUpdate {
@Autowired
private MongoOperations mongoOps;
// This method receives list of person objects
public void upsertMongoContact(List<Person> persons) {
for (Person person : persons) {
Update updateCmd = new Update();
Query query = new Query();
query.addCriteria((Criteria.where("firstName").is((person.firstName()))));
for (MyContacts contact : person.getContact().getmyContacts()) {
updateCmd.addToSet("contact.myContacts.", contact);
}
mongoOps.findAndModify(query, updateCmd, FindAndModifyOptions.options().upsert(true), Person.class);
}
}
}
有什么方法可以根据名称更新 mycontacts 数组。如果不执行插入操作。
【问题讨论】:
-
您遇到了什么问题?
-
@Remario:如果我更改输入数据中现有联系人的任何电话号码。在数组中添加一个新元素,而不是更新现有的联系人
标签: java spring mongodb spring-boot spring-data-mongodb