Как я могу обновить/вставить объект во внутренний список в Mongodb?

Blog {
   id:"001"
   title:"This is a test blog",
   content:"...."
   comments:[{title:"comment1",content:".."},{title:"comment2",content:"..."}]    
}
Комментарии

- это внутренний список в блоге.

Но как я могу получить только comment1? и как я могу вставить/обновить новый комментарий в блоге, если я получу полный блог и вставлю/обновил содержимое в список комментариев, а затем сохранил полный блог, как решить параллельный isuue?

Спасибо.

Ответ 1

Чтобы извлечь внедренный документ, вам нужно получить основной документ и выполнить поиск по его комментариям вложенный документ нужного документа. В MongoDB нет никакого способа сделать лучше.

Чтобы вставить/обновить во встроенном документе, вы можете использовать систему запросов $push и $set для этого.

Ответ 2

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 - это индекс данного комментария. Необходимо использовать знак кавычки.

Ответ 3

Чтобы обновить конкретный комментарий по заголовку.

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' }}); 

Если какая-либо проблема ответит мне.