MongoDB数组对象Update和Page

时间:2011-05-27 03:13:20

标签: mongodb mongodb-.net-driver

我有一个存储在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. 如何分页数组对象
  3. 感谢。

    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'为空,'newData'有数据,为什么?

2 个答案:

答案 0 :(得分:4)

1.使用positional operator

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

另外,您可能需要在Comment类中添加id。在这种情况下,您可以更新匹配的查询注释,如下所示:

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

2.您可以加载整个主题,并使用linq从c#进行注释分页。或者你也可以像这样使用$slice

var comments = themeCollection
               .FindAs<Comment>()
               .SetFields(Fields.Slice("Comments", 40, 20))
               .ToList(); 

答案 1 :(得分:0)

对于第二个问题,您需要执行以下操作:

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