如何在Mongodb中更新/插入Object到内部列表?

时间:2011-01-03 04:35:18

标签: concurrency mongodb save

Blog {
   id:"001"
   title:"This is a test blog",
   content:"...."
   comments:[{title:"comment1",content:".."},{title:"comment2",content:"..."}]    
}

评论是博客中的内部列表。

但我怎样才能只检索comment1? 如何在博客中插入/更新新评论?如果我获得完整博客并将内容插入/更新到评论列表中,那么保存完整博客,如何解决并发问题?

感谢。

3 个答案:

答案 0 :(得分:22)

Blog {  
    id:"001"  
    title:"This is a test blog",  
    content:"...."  
    comments:[{title:"comment1",content:".."},{title:"comment2",content:"..."}]      
}

要插入新评论,请使用$push

db.blogs.update({id:"001"}, {$push:{comments:{title:"commentX",content:".."}}});  

要更新评论,请使用$set

db.blogs.update({id:"001"}, {$set :{"comments.2": {...} }});  
db.blogs.update({id:"001"}, {$set :{"comments.2.title": "new title" }});  

2是给定评论的索引。引号的使用是必要的。

答案 1 :(得分:5)

要获取嵌入式文档,您需要获取主文档并在其注释中搜索嵌入文档所需的文档。实际上在MongoDB中没有办法做得更好。

要在嵌入式文档中插入/更新,您可以使用$push$set查询系统来执行此操作。

答案 2 :(得分:1)

按标题更新特定评论。

db.blogs.update({'comments.title': 'comment1'}, {$set :{"comments.$.title": "new title" }});

您还可以使用标题更新评论内容。

db.blogs.update({'comments.title': 'comment1'},  
{$set :{"comments.$.title": "new title", 'comments.$.content': 'this is content' }}); 

如果有任何问题,请回复我。