Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用MongoDB&;将元素附加到现有项的数组中;C#_C#_Mongodb - Fatal编程技术网

使用MongoDB&;将元素附加到现有项的数组中;C#

使用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

我需要通过C#向MongoDB文档的一部分数组元素添加一条新注释,但我不知道如何做

奇怪的是,当我插入一个带有标签的文档时,这些标签存储在一个字符串元素数组中,它会按预期工作:

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