Как я могу обновить/вставить объект во внутренний список в 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' }});
Если какая-либо проблема ответит мне.