Обновление объекта массива MongoDB и Page - PullRequest
4 голосов
/ 27 мая 2011

У меня есть класс сущности, хранящийся в MongoDB, который выглядит примерно так:

public class Theme
{
    public ObjectId Id { get; set; }
    public string Description { get; set; }
    public string Title { get; set; }
    public List<Comment> CommentList { get; set; }
}


public class Comment
{
    public string Content { get; set; }
    public string Creator { get; set; }
    public string Date { get; set; }
}

Используя драйвер MongoDB C # и основываясь на модели, как я могу решить следующие вопросы:

  1. Обновление комментария к теме, например: theme1.CommetList[10].Creator = "Jack"
  2. Как создать страницу для объекта массива

Спасибо.

Wentel


@ Andrew Orsich

Спасибо за вашу помощь.

И еще одна проблема:

var query = Query.EQ("Id", id);   //The 'id' type is ObjectId
List<Theme> newDatas = themeCollection.FindAs<Theme>(query).ToList();
Theme newData = themeCollection.FindOneByIdAs<Theme>(allDatas[0].Id);

Результат: 'newDatas' isnull, а у 'newData' есть данные, почему?

Ответы [ 2 ]

4 голосов
/ 27 мая 2011

1.Использование позиционного оператора :

var query = Query.And(Query.EQ("Id", id));
var update = Update.Set("CommetList.10.Creator", "Jack");

Также вам, вероятно, нужно добавить id в класс Comment. В этом случае вы можете обновить сопоставленный запросом комментарий следующим образом:

var query = Query.And(Query.EQ("Id", id), Query.EQ("CommentList.Id", commentId));
var update = Update.Set("CommentList.$.Creator", "Jack");

2.Вы можете загрузить всю тему и сделать подкачку комментариев из c #, например, используя linq. Или вы также можете использовать $ slice вот так:

var comments = themeCollection
               .FindAs<Comment>()
               .SetFields(Fields.Slice("Comments", 40, 20))
               .ToList(); 
0 голосов
/ 30 мая 2011

Для второго вопроса вам нужно сделать следующее:

 ObjectId oid = new ObjectId(id);
 var query = Query.EQ("_id", oid);
...