我有一个存储在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#驱动程序,并根据模型,我如何解决以下问题:
theme1.CommetList[10].Creator = "Jack"
感谢。
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'有数据,为什么?
答案 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);