Мне нужно добавить новый комментарий к элементу массива, который является частью документа MongoDB через C #, но не могу понять, как это сделать.
Странно то, что когда я вставляюдокумент с тегами, которые хранятся в массиве строковых элементов, он работает как положено:
var post = new Post
{
Title = model.Title,
Author = User.Identity.Name,
CreatedAtUtc = DateTime.Now,
Content = model.Content,
Tags = model.Tags.Split(",".ToCharArray()).ToList()
};
Теперь, когда я пытаюсь добавить новый комментарий к существующему документу, я использую следующее:
var filter = Builders<Post>.Filter.Eq("_id", model.PostId);
var update = Builders<Post>.Update.Push<Comment>("Comments",
new Comment
{
Author = User.Identity.Name,
CreatedAtUtc = DateTime.Now,
Content = model.Content
});
var ret = await blogContext.Posts.FindOneAndUpdateAsync(filter, update);
Но в моем документе элемент «Комментарии» остается пустым:
"_id" : ObjectId("5b82ec466b63730fe4c51915"),
"Author" : "Joe",
"Content" : "content1",
"CreatedAtUtc" : ISODate("2018-08-26T18:06:53.238Z"),
"Title" : "title1",
"Comments" : [ ],
"Tags" : [
"tag1.1",
"tag1.2",
" tag2.2"
]
Может кто-нибудь уточнить, как добавить дополнительный комментарий к существующему документу?
Спасибо
UPDATE-1:
Я нашел этот вопрос на StackOverflow: Как использовать модификатор $ push update в MongoDB и C # при обновлении массива вдокумент , в котором описана моя точная проблема, за исключением того, что массив используется в массиве строк, а не в массиве объекта / документа, но я все еще думал, что это разрешит его, адаптировав мой код к нему:
var filter = Builders<Post>.Filter.Eq("_id", model.PostId);
var update = Builders<Post>.Update
.Push<Comment>(e => e.Comments, new Comment
{
Author = User.Identity.Name,
CreatedAtUtc = DateTime.Now,
Content = model.Content
});
await blogContext.Posts.FindOneAndUpdateAsync(filter, update);
но это все ещеоставлю ли мой элемент массива комментариев пустым, как и в оригинальном вопросе.
Есть идеи?