【问题标题】:Update multiples fields Mongo DB更新多个字段MongoDB
【发布时间】:2013-07-18 14:22:50
【问题描述】:

我对 mongo db 有一个大问题,因为我想用一个请求更新多个字段。

我的 Json 是:

db.test.findOne(); { "_id" : ObjectId("51e7dd16d2f8db27b56ea282"), “广告”:“noc2”, “列表” : { “p45”:{ “id”:“p45”, “日期”:ISODate(“2014-01-01T12:18:30.568Z”), “价值3”:21, “价值1”:100, “价值2”:489 }, “p6”:{ “id”:“p6” “日期”:ISODate(“2013-07-18T12:18:30.568Z”), “价值3”:21, “价值1”:100, “价值2”:489 }, “p4578”:{ “身份证”:“4578” “日期”:ISODate(“2013-07-18T12:18:30.568Z”), “价值3”:21, “价值1”:100, “价值2”:489 } } }

如果 createdDate 字段不存在或为空,我想为所有元素列表创建一个字段 createdDate。

一个请求示例,我用于在我的代码 java 中使用 upsert 更新一个字段:

db.people.update({"advertiser":"noc2","list.4578.createdDate":{$exists:false}},{$set:{"list.p4578.createdDate":"08/08/08"}});

我尝试使用 java,其中 list.4578 被变量替换,但对于太多字段来说太长了。如果我有 100 个字段,我会执行 100 个请求。

看:

public void createdFirstDateField(MongoAccess mongo, String ad,HashMap<String,Object> hfirstDate){



    BasicDBObject searchQuery = new BasicDBObject();


    Iterator <String> it = hfirstDate.keySet().iterator();
    String key="";

    while (it.hasNext()){

    key=it.next();
    searchQuery.append("ad", ad).append(key, new BasicDBObject("$exists", false));

    //System.out.println(key);
    BasicDBObject doc = new BasicDBObject ();
    doc.append("$set",new BasicDBObject(key,new Date()));
    mongo.insert(searchQuery, doc); // update with upsert true


    }

}

谢谢。

【问题讨论】:

    标签: java json mongodb request updates


    【解决方案1】:

    你为什么不使用update with upsert?

    db.people.update({"advertiser": "noc2"},
                     {$set: {"list.$.createdDate": "08/08/08"}},
                     {$upsert: true);
    

    如果createdDate 存在,它将被更新,否则将被插入。

    【讨论】:

    • 是的,我试过了,但效果不好,因为如果 createdDate 仅为 null 并且您的解决方案始终更新 createdDate 字段,我想更新所有字段。谢谢
    【解决方案2】:

    您可以一次更新多个文档,using update Multi。但是以非原子方式更新多个嵌入文档。

    您可以签出 mongodb 位置运算符,但这不适合您的用例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-24
      • 1970-01-01
      • 2021-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多