2013-09-09 4 views
1

Мы имеем следующую модель домена:Обновление встроенного элемента коллекции MongoDB

public class User 
{ 
    public ObjectId Id { get; set; } 

    public string Name { get; set; } 

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

public class Comment 
{ 
    public ObjectId Id { get; set; } 

    public string Text { get; set; } 
} 

Мы используем драйвер MongoDB Csharp в нашем проекте. У нас есть коллекция «Пользователи» и все комментарии, относящиеся к конкретному пользователю, которые мы храним в этом документе.

Вопрос 1: Что такое правильный способ обновить текст комментария, когда я знаю USERID и CommentID? Вопрос 2: Должны ли внедренные элементы иметь собственные идентификаторы?

Благодаря

+0

Чтобы ответить на вопрос 2, было бы полезно, чтобы узнать больше о вашем прецеденту. Вам часто нужно будет ссылаться на комментарии вне контекста пользователя, к которому они относятся? Обычно, если вы их внедряете, вы также не дадите каждому комментарию свой собственный уникальный идентификатор. – 3rf

ответ

0

Это код, который нужно:

var update = Update.Set("Comments.$.Text", "new comment text"); 
var query = Query.And(
    Query<User>.EQ(u => u.Id, userId), 
    Query<User>.ElemMatch(u => u.Comments, eq => eq.EQ(c => c.Id, commentId))); 
userCollection.Update(query, update); 
+0

Да, это имеет смысл, спасибо! –