2014-10-17 1 views
0

Сообщение класса:Обновление свойства конкретного элемента коллекции с FindAndModify

public class Post 
{ 
    [BsonRepresentation(BsonType.ObjectId)] 
    public string Id { get; set; } 
    [BsonRepresentation(BsonType.ObjectId)] 
    public string CreatorId { get; set; } 
    public string CreatorName { get; set; } 
    public string Text { get; set; } 
    public bool IsPublic { get; set; } 
    public ICollection<Comment> Comments { get; set; } 
    public DateTime CreationDate { get { return ObjectId.Parse(Id).CreationTime; } } 
    public DateTime? DeletionDate { get; set; } 
} 

Комментарий Класс:

public class Comment 
{ 
    [BsonRepresentation(BsonType.ObjectId)] 
    public string Id { get; set; } 
    [BsonRepresentation(BsonType.ObjectId)] 
    public string CreatorId { get; set; } 
    public string CreatorName { get; set; } 
    public string Text { get; set; } 
    public DateTime CreationDate { get { return ObjectId.Parse(Id).CreationTime; } } 
    public DateTime? DeletionDate { get; set; } 
} 

Я хотел бы найти установить DeletionDate свойство Comment внутри Post.Comments, учитывая, что Comment.Id и Comment.CreatorId соответствует заданным параметрам.

Как это сделать?

ответ

0

Я решил его следующим:

var query = Query<Post>.ElemMatch(p => p.Comments, builder => 
    builder.And(
     Query<Comment>.EQ(c => c.Id, commentId), 
     Query<Comment>.EQ(c => c.CreatorId, creatorId))); 

var update = Update.Set("Comments.$.DeletionDate", DateTime.UtcNow); 

var args = new FindAndModifyArgs 
{ 
    Query = query, 
    Update = update 
}; 

var result = _db.Posts.FindAndModify(args); 
1
QueryDocument query= new QueryDocument(); 
      query.Add(new BsonDocument("Comments.$.Id","givenCommentId")); 
      UpdateDocument update = new UpdateDocument(); 
      update.Add(new BsonElement("Comments.$.DeletionDate", "yourUpdatedDate")); 

Вы можете использовать его в FindAndModifyArgs

Однако я забыл whehther позиционного оператор $ может использоваться для двух или более полей, поэтому я не добавлять new BsonDocument("Comments.$.CreatorId","givenCommentCreatorId") в query.You нужно проверить.

+0

Это не работает, как это, однако, спасибо за упоминание позиционного оператора, который был необходим в моей команде обновления. Я решил это с помощью '' $ elemMatch''. –