2014-03-13 94 views
2

我正在尝试将文档添加到子文档中,但未添加。MongoDB/Java:在子文档中插入文档

这是代码:

MongoClient mongo = new MongoClient("localhost", 27017); 
DB db = mongo.getDB("testdb"); 

DBCollection test = db.getCollection("test"); 
BasicDBObject document = new BasicDBObject(); 
document.put("username", "user"); 
test.insert(document); 

BasicDBObject document1 = new BasicDBObject(); 
document1.put("title", "test1"); 
BasicDBObject updateCommand = new BasicDBObject(); 
updateCommand.put("$addToSet", new BasicDBObject("test", document1)); 
test.update(document, updateCommand); 

BasicDBObject document2 = new BasicDBObject(); 
document2.put("title", "test2"); 
BasicDBObject updateCommand1 = new BasicDBObject(); 
updateCommand1.put("$addToSet", new BasicDBObject("test", document2)); 
test.update(document1, updateCommand1); 

结果是:

{ 
    "_id" : ObjectId("5321c6b0c2e682dc2fb97774"), 
    "test" : [ 
     { 
      "title" : "test1" 
     } 
    ], 
    "username" : "user" 
} 

正如你可以看到不加test2的,我想不通为什么:(

UPDATE :这是我擅长的代码

"_id" : ObjectId("5321caa63b81968cb5f23d8c"), 
     "test" : [ 
       { 
         "title" : "test1" 
         "test" : [ 
            { 
              "test" : "test2" 
            }] 
       }, 
       { 
         "title" : "test2" 
       } 
     ], 
     "username" : "user1" 
+0

我认为问题在于你的查询文档在最后一行是错误的。它应该是类似于 'test.update(document,updateCommand1);' – evanchooly

+0

我希望test2在IN test1不在其旁边 –

回答

0

我猜你需要扭转操作:

BasicDBObject document1 = new BasicDBObject(); 
document1.put("title", "test1"); 

BasicDBObject document2 = new BasicDBObject(); 
document2.put("title", "test2"); 
BasicDBObject updateCommand1 = new BasicDBObject(); 
updateCommand1.put("$addToSet", new BasicDBObject("test", document2)); 
test.update(document1, updateCommand1); 

BasicDBObject updateCommand = new BasicDBObject(); 
updateCommand.put("$addToSet", new BasicDBObject("test", document1)); 
test.update(document, updateCommand); 

因为你在更新后,被用来更新“文件”中的“文档1”。然后第二个更新也不会更新“文档”。