gpt4 book ai didi

java - 在 MongoDB 中添加多个子文档

转载 作者:行者123 更新时间:2023-11-29 06:00:08 24 4
gpt4 key购买 nike

我正在开发一个客户数据加载器,客户可以在其中拥有多个地址。如果找不到客户,我会创建它并添加地址。如果客户存在,我只需添加新地址,如下所示:

    DBObject findCustomer = new BasicDBObject();
findCustomer.put("email", custEmail);

//check for existing customer
DBObject newCustomer = customerCollection.findOne(findCustomer);

if (newCustomer == null) {
//INSERT
newCustomer = new BasicDBObject();
newCustomer.put("firstname", firstname);
newCustomer.put("lastname", lastname);
newCustomer.put("email", custEmail);
newCustomer.put("password", custData.getPassword());
newCustomer.put("softwaretime", new Date());
}

DBObject newAddress = new BasicDBObject();
City tempCity = new City();
tempCity = addressData.getCity();

newAddress.put("type", addressData.getType());
newAddress.put("line1", addressData.getLine1());
newAddress.put("line2", addressData.getLine2());
newAddress.put("city", tempCity.getCity());
newAddress.put("state", tempCity.getState());
newAddress.put("postal", tempCity.getZip());
newAddress.put("country", tempCity.getCountry());

newCustomer.put("address", newAddress);

customerCollection.save(newCustomer);

这适用于新客户。问题是当客户已经存在时,新地址会覆盖现有地址。

如何将新地址添加到客户,以便保留多个地址?

根据我的发现,我应该能够通过 shell 的“推送”来完成此操作。但我没有将“推送”视为 BasicDBObject 上的方法。

最佳答案

您希望地址是地址列表而不是单个地址文档。因此,对于您希望拥有的新客户:

newCustomer.put("addresses", [newAddress])customerCollection.save(newCustomer)

对于您想要的现有客户

customerCollection.update(newCustomer, {$push: {"addresses": newAddress}})

抱歉,我不知道 java API,所以你必须修改上面的代码来创建合适的对象

关于java - 在 MongoDB 中添加多个子文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10471553/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com