Обновите коллекцию, вставив новый документ во встроенные документы и извлеките идентификатор добавленного документа. - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть следующая диаграмма классов

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

В первый раз я создам коллекцию блогов с DiscussionPanel и Comments в виде пустого списка.Когда пользователь вводит комментарий под панелью обсуждений, комментарии будут обновлены во встроенном документе «Комментарии», и мне придется выбрать вставленный идентификатор для комментария и сохранить его в коллекции панелей обсуждения.Я работаю с драйвером MongoDB c #.Как мне этого добиться?

Я могу вставить комментарий во внутренний документ с помощью команды Update.Push.Но я не могу получить идентификатор вставленного документа.

Заранее благодарен за все ответы.

1 Ответ

0 голосов
/ 26 февраля 2019

Вы можете сгенерировать 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...