使用MongoDB&;将元素附加到现有项的数组中;C#
我需要通过C#向MongoDB文档的一部分数组元素添加一条新注释,但我不知道如何做 奇怪的是,当我插入一个带有标签的文档时,这些标签存储在一个字符串元素数组中,它会按预期工作:使用MongoDB&;将元素附加到现有项的数组中;C#,c#,mongodb,C#,Mongodb,我需要通过C#向MongoDB文档的一部分数组元素添加一条新注释,但我不知道如何做 奇怪的是,当我插入一个带有标签的文档时,这些标签存储在一个字符串元素数组中,它会按预期工作: var post = new Post { Title = model.Title, Author = User.Identity.Name, CreatedAtUtc = DateTime.Now, Content = model.Content, Tags = model.Ta
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);
有人能澄清我如何在现有文档中添加附加注释吗
谢谢
更新-1:
我在StackOverflow上发现了这个问题:它描述了我的确切问题,除了字符串数组中使用的数组,而不是对象/文档数组中使用的数组,但我仍然认为通过调整代码以匹配它可以解决这个问题:
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);
var-filter=Builders.filter.Eq(“\u-id”,model.PostId);
var update=Builders.update
.Push(e=>e.注释,新注释
{
Author=User.Identity.Name,
CreatedAtUtc=DateTime。现在,
Content=model.Content
});
等待blogContext.Posts.FindOneAndUpdateAsync(过滤器,更新);
但这仍然使我的Comments数组元素保持为空,就像在原始问题中发布的一样
有什么想法吗?我的问题的Update-1中提供的代码是正确的,这个问题一直与另一个问题有关 Model.PostId需要转换为ObjectId:
var filter = Builders<Post>.Filter.Eq("_id", new ObjectId(model.PostId));
var filter=Builders.filter.Eq(“_id”,新ObjectId(model.PostId));
转换后,“注释”按预期添加到文档的“注释”数组属性中
真令人沮丧,它没有抛出一个错误,让您知道使用的类型是无效的!在一个愚蠢的错误上浪费了大量的时间,但我想我吸取了教训
希望这能帮助别人 请注意,与我的原始问题一起发布的代码可能也是正确的,但我只是没有检查它,因为我在这方面浪费了足够的时间。我只是想提一下,因为它稍微简单一点。
var filter = Builders<Post>.Filter.Eq("_id", new ObjectId(model.PostId));