通过将新文档插入嵌入式文档并获取已添加文档的ID来更新集合

时间:2019-02-26 04:40:41

标签: mongodb mongodb-query mongodb-.net-driver

我有下面的类图

  public class Blog
{
    public Guid BlogId { get; set; }

    public string BlogName { get; set; }

    public List<DiscussionPanel> DiscussionPanel { get; set; }

    public List<Comment> Comments { get; set; }
}

public class DiscussionPanel
{
    public Guid DiscussionPanelId { get; set; }

    public string DiscussionPanelName { get; set; }

    public Guid CommentId { get; set; }
}

public class Comment
{
    public Guid CommentId { get; set; }

    public string CommentDesc { get; set; }
}

第一次,我将创建一个Blog集合,其中DiscussionPanel和Comments为空列表。当用户在“讨论”面板下输入评论时,这些评论将在嵌入式文档“评论”中更新,并且我必须获取插入的ID作为评论并存储到“讨论”面板集合中。我正在使用MongoDB c#驱动程序。我该如何实现?

我可以使用Update.Push命令将注释插入内部文档中。但是我无法获取插入文档的ID。

提前感谢所有答案。

1 个答案:

答案 0 :(得分:0)

您可以生成一个ObjectId并将其分配给新的comment

public static ObjectId AddComment(ObjectId blogId)
{
    var comment = new Comment
    {
        Id = ObjectId.GenerateNewId(),
        CommentDesc = "My comment description"
    };
    var context = new Context();
    var builder = Builders<Blog>.Filter;
    var filter = builder.Eq(x => x.Id, blogId);
    var update = Builders<Blog>.Update
        .Push(x => x.Comments, comment);
    var updateResult = context.Blog.UpdateOne(filter, update);
    return comment.Id;
}

您还可以获取已修改文档的数量,以确保插入了注释:

var modified = updateResult.ModifiedCount;
if (modified != 0)
{
    // something was updated
}