【问题标题】:How to update Mongo DB document with complex structure如何更新结构复杂的MongoDB文档
【发布时间】:2016-06-28 00:46:25
【问题描述】:

我有一个具有以下结构的 mongoDB 文档

{
  "id": 9595511812,
  "Feeds": [
    {
      "department": "mseb",
      "consumer_number": 1234567890,
      "due_date": "2016-11-11",
      "due_amount": 400,
      "balance_amount": 0,
      "unitsConsumed": 40,
      "freezeDate": "2016-11-11",
      "lastPaidDate": "2016-11-11",
      "billNumber": "9877",
      "id": "1",
      "paid": false
    },
    {
      "department": "mseb",
      "consumer_number": 1234567890,
      "due_date": "2016-11-21",
      "due_amount": 400,
      "balance_amount": 0,
      "unitsConsumed": 40,
      "freezeDate": "2016-11-21",
      "lastPaidDate": "2016-11-21",
      "billNumber": "9877",
      **"id": "2",**
      "paid": false
    }
  ]
}

我想为 id=2 的 Feed 更新付费 == true(上面的**标记字段)。如何在使用 mongo java 客户端时做到这一点?

我试过了

 DB db = DBConnection.getDatabaseConnection();
        DBCollection table = db.getCollection("customer");
        BasicDBObject newDocument = new BasicDBObject();
        newDocument.append("$set", new BasicDBObject().append("Feeds.paid", "true"));

        BasicDBObject searchQuery = new BasicDBObject().append("id", "9595511812");

        table.update(searchQuery, newDocument);

【问题讨论】:

    标签: java mongodb


    【解决方案1】:

    Feeds 是一个数组,您正在更新第二个元素,因此 set 将以:

    .append("Feeds.1.paid", "true"));
    

    代替:

    .append("Feeds.paid", "true"));
    

    【讨论】:

    • 我的文档是 { "_id": 9595511812, "password": "password@123", "name": "Akanksha Jain", "address": "Katraj, Pune", "email" :“akanksha_jain@psl.com”,“eCivilBody”:[{“id”:1,“部门”:“mseb”,“consumer_number”:1234567890,“due_amount”:400,“balance_amount”:“0”,“ freezeDate”:“2016-11-11”,“unitsConsumed”:40,“due_date”:“2016-11-11”,“lastPaidDate”:“2016-11-11”,“billNumber”:“9877”,“付费”:“假”}] }
    • 我的代码 sn-p 是 DB db = DBConnection.getDatabaseConnection(); DBCollection 表 = db.getCollection("customer"); BasicDBObject newDocument = new BasicDBObject(); newDocument.append("$set", new BasicDBObject().append("eCivilBody.1.paid", "true")); BasicDBObject searchQuery = new BasicDBObject().append("id", "9923052628"); table.update(searchQuery, newDocument);
    • 是的...?那是另一种情况?问题中的案例有效,但不是这个...?
    • 您粘贴的代码中的id 不匹配(9595511812 与 9923052628)
    猜你喜欢
    • 2016-08-18
    • 2022-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多