2

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

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

我在套件名称、测试名称和里程碑 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 中添加文档 -> 这似乎工作正常

我想弄清楚的是:如果我的文件中有一个新的里程碑 ID 值,我只需要向某个现有文档的里程碑数组添加一个里程碑。现有文档是根据套件名称和测试名称确定的。

所以如果milestone_id = 10,文档应该看起来像

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

]
}

我怎样才能做到这一点?

谢谢

4

2 回答 2

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);
于 2013-03-12T22:47:27.230 回答
1
BasicDBObject newDocument = new BasicDBObject();
newDocument.append("$set", new BasicDBObject().append("clients", 110));

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

collection.update(searchQuery, newDocument);
于 2016-09-13T04:14:29.830 回答