使用JAVA更新mongoDB中的文档

时间:2013-03-12 22:37:30

标签: mongodb mongodb-java

我刚刚开始使用JAVA学习mongoDB。我在mongo中有以下文档

{
"_id": {
    "$oid": "513fa587c5d0cf174eb9b1f8"
},
"suitename": "test_suite_name",
"testname": "test_name]",
"milestones": [
    {
        "milestone_id": 45
    }
]
}

我在suitename,testname和milestone_id上​​有一个复合键。我必须处理一个包含这三个字段的文件。我创建一个简单的DBObject查询并检查count!= 0

BasicDBObject query = new BasicDBObject();
query.put("suitename", testsuite);
query.put("testname", testcase);
query.put("milestones.milestone_id", SampleProgram.milestone_id);

如果count == 0 - >在mongo中添加文档 - >这似乎工作正常

我想弄清楚的是: 如果我的文件中有一个新的milestone_id值,我只需要在某个现有文档的里程碑数组中添加一个里程碑。现有文档基于suitename AND testname确定。

因此,如果milestone_id = 10,则文档看起来应该是

{
"_id": {
    "$oid": "513fa587c5d0cf174eb9b1f8"
},
"suitename": "test_suite_name",
"testname": "test_name]",
"milestones": [
    {
        "milestone_id": 45
    },
    {
        "milestone_id": 10
    }

]
}

我该如何做到这一点?

由于

2 个答案:

答案 0 :(得分:4)

这可以通过$push运算符来完成,该运算符将值附加到数组和update(…)方法。

BasicDBObject query = new BasicDBObject();
query.put("suitename", testsuite);
query.put("testname", testcase);

BasicDBObject push = new BasicDBObject();
push.put("$push",
  new BasicDBObject("milestones",
    new BasicDBObject("milestone_id", SampleProgram.milestone_id)));

yourCollection.update(query, push);

答案 1 :(得分:1)

BasicDBObject newDocument = new BasicDBObject();
newDocument.append("$set", new BasicDBObject().append("clients", 110));

BasicDBObject searchQuery = new BasicDBObject().append("hosting", "hostB");

collection.update(searchQuery, newDocument);