有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java更新多字段Mongo DB

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

我的Json是:


    db.test.findOne();
{
        "_id" : ObjectId("51e7dd16d2f8db27b56ea282"),
        "ad" : "noc2",
        "list" : {
                "p45" : {
                        "id" : "p45",
                        "date" : ISODate("2014-01-01T12:18:30.568Z"),
                        "value3" : 21,
                        "value1" : 100,
                        "value2" : 489
                },
                "p6" : {
                        "id" : "p6"
                        "date" : ISODate("2013-07-18T12:18:30.568Z"),
                        "value3" : 21,
                        "value1" : 100,
                        "value2" : 489
                },
                "p4578" : {
                       "id" : "4578"
                        "date" : ISODate("2013-07-18T12:18:30.568Z"),
                        "value3" : 21,
                        "value1" : 100,
                        "value2" : 489
                }
        }
}

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

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

^{pr2}$

我尝试使用java的where 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


    }

}

谢谢


共 (2) 个答案

  1. # 1 楼答案

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

    您可以签出mongodb位置操作符,但这不适合您的用例

  2. # 2 楼答案

    你为什么不使用update with upsert

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

    如果createdDate存在,它将被更新,如果不存在,它将被插入