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

Concurrency 如何在Mongodb中更新/插入对象到内部列表中?,concurrency,mongodb,save,Concurrency,Mongodb,Save,评论是博客中的一个内部列表 但是我怎样才能只检索comment1呢? 如何在博客中插入/更新新评论?如果我得到一个完整的博客,并将内容插入/更新到评论列表中,然后保存完整的博客,如何解决并发isuue 谢谢。要获取嵌入的文档,您需要获取主文档,并在其注释嵌入的文档上搜索您想要的文档。实际上,在MongoDB中没有更好的方法 要在嵌入式文档中插入/更新,您可以使用$push和$set查询系统来执行此操作。Blog{ id:“001” 标题:“这是一个测试博客”, 内容:“……” 评论:[{标题:“

评论是博客中的一个内部列表

但是我怎样才能只检索comment1呢? 如何在博客中插入/更新新评论?如果我得到一个完整的博客,并将内容插入/更新到评论列表中,然后保存完整的博客,如何解决并发isuue


谢谢。

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

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

Blog{
id:“001”
标题:“这是一个测试博客”,
内容:“……”
评论:[{标题:“评论1”,内容:“…”},{标题:“评论2”,内容:“…”}]
}
要插入新注释,请使用
$push

db.blogs.update({id:“001”},{$push:{comments:{title:“commentX”,content:“…”});
要更新注释,请使用
$set

db.blogs.update({id:'001},{$set:{“comments.2:{…}});
更新({id:“001”},{$set:{“comments.2.title”:“newtitle”});

2是给定注释的索引。必须使用引号。

按标题更新特定注释

Blog {
   id:"001"
   title:"This is a test blog",
   content:"...."
   comments:[{title:"comment1",content:".."},{title:"comment2",content:"..."}]    
}
您还可以使用注释的标题更新注释的内容

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

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

谢谢,但我只想获取注释1,我需要获取所有注释?如果注释数量很大,可能会影响性能。你说得对,这就是为什么将嵌入式文档与一些文档一起使用以随时间增长不是一个好的设计。您需要等待虚拟集合在futurI中执行此操作。如果您对此解决方案有疑问,请同时调用db.blogs.update(竞赛条件),mongo是否会确保列表中的2项保存在文档中?
db.blogs.update({'comments.title': 'comment1'},  
{$set :{"comments.$.title": "new title", 'comments.$.content': 'this is content' }});