【问题标题】:Mongooperations add/remove json into MongoDBMongooperations 将 json 添加/删除到 MongoDB
【发布时间】:2015-09-24 12:30:38
【问题描述】:

我有这样的 JSON 结构:

{

"prodinfo": {
             "memberid": "m1",
             "user":{
                     "userid":"001",
                     "product":{
                                "productname": ["pname1"],
                                "productid": ["p1"]     
                               }
                     }
             }

}

对于一个给定的 memberid ,它可以有多个 userid 并且一个 userid 可以有多个 product.productname , product.productid 在一个数组中。我应该能够以相同的方式对该文档执行添加和删除操作。 我尝试使用 Mongooperations(springframwork 数据)来实现相同的操作,以将文档保存在 MongoDB 中。但我不能做时尚。 有人可以指导我如何使用 Springframework 数据的 Mongooperations/Mongotemplate 来实现这一目标吗? 提前致谢!

【问题讨论】:

  • 不是根据你的结构它不能。 JSON 和因此 BSON (这实际上是 MongoDB 用于存储而不是 JSON )只能具有给定键的单一出现,而不是您声称的“多个”键。为此需要一个“数组”或“列表”结构,这与您在此处描述的“哈希/映射”结构不同。我建议您没有正确说明您的真实结构是什么。
  • @BlakesSeven ,我正在尝试“对于给定的 memberid ,它可以有多个 userid 并且一个 userid 可以有多个 product.productname , product.productid 在一个数组中。我应该能够执行添加并以相同的方式删除到此文档”,为此我认为上面提到的 JSON 结构,我可能是错的,因为我是 mongodb 的新手。请建议结构应该是什么?
  • 你错了,因为上面提到的结构不包含数组,即使你一直提到数组。如果这是您的结构,那么它是不正确的。或者,这不是您的实际结构,您需要更改您的问题以显示正确的结构。

标签: java mongodb mongodb-query mongotemplate


【解决方案1】:

示例

@Document
public class prodinfo{
private String memberid;
privare List<User> user;

// getter and setter
}

public class User
{
private String userId;
private Product product;

// getter and setter
}


public class product
{
private List<String> productname;
private List<String> productid;

// getter and setter
}

根据您的解释,这里一个 memberId 有多个用户,而用户的产品包含多个 productID 和 productName 用于特定的 userID。

【讨论】:

  • 感谢@nirajdarji,实际上我可以根据 JSON 结构设计实体类,但是我面临的问题是我无法以给定 memeberid 的方式持久化数据是多个用户 ID,对于一个用户 ID,可以有多个 product.productname 和 product.productid(这将是列表结构)。每次我设置值并执行 mongooperations.upsert() 时,它都会覆盖 .
  • 我的代码:Query query= new Query(); query.addCriteria(Criteria.where("user.userID").is(userID).andOperator(Criteria.where(memberid).is(memberid))); Update update = new Update(); update.set("memberid",memeberID); update.set("user.userid",userID); update.set("user.product.productid",productID); update.set("user.product.productName",productname); mongoOperations.upsert(query, update, ProdInfo.class);
  • 我认为您希望通过结构保存数据的方式是错误的。您想为某个字段保留多个数据,因此您需要数组或列表。
猜你喜欢
  • 1970-01-01
  • 2015-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多