Son*_*bby 4 c# mongodb mongodb-.net-driver
我有2个班:
public class Vote
{
public string VoteId { get; set; }
public string Question { get; set; }
public List<VoteAnswer> AnswerList { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和:
public class VoteOption
{
public string OptionId { get; set; }
public string OptionName { get; set; }
public double VoteCount { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如何更新/删除VoteOption在一个Vote地方VoteId = voteId和OptionId = optionId?使用C#驱动程序
首先,我通过以下方式获得VoteOption:
var v = col.FindOneAs<Vote>(Query.EQ("VoteID", voteId));
VoteOption vo = v.AnswerList.Find(x => x.OptionId == optionId);
Run Code Online (Sandbox Code Playgroud)
结束设置一些值:
vo.OptionName = "some option chose";
vo.VoteCount = 1000;
Run Code Online (Sandbox Code Playgroud)
但我不知道下一步该更新vo来Vote parent.
并且,如果我想删除它vo,请告诉我这样!
MongoDB中的数据是这样的:
{
"_id" : "460b3a7ff100",
"Question" : "this is question?",
"AnswerList" : [{
"OptionId" : "1",
"OptionName" : "Option 1",
"VoteCount" : 0.0
}, {
"OptionId" : "2",
"OptionName" : "Option 2",
"VoteCount" : 0.0
}, {
"OptionId" : "3",
"OptionName" : "Option 3",
"VoteCount" : 0.0
}
}]
}
Run Code Online (Sandbox Code Playgroud)
dek*_*kko 11
要更新子文档,您可以使用:
var update = Update.Set("AnswerList.$.OptionName", "new").Set("AnswerList.$.VoteCount", 5);
collection.Update(Query.And(Query.EQ("_id", new BsonObjectId("50f3c313f216ff18c01d1eb0")), Query.EQ("AnswerList.OptionId", "1")), update);
Run Code Online (Sandbox Code Playgroud)
探查:
"query" : { "_id" : ObjectId("50f3c313f216ff18c01d1eb0"), "AnswerList.OptionId" : "1" },
"updateobj" : { "$set" : { "AnswerList.$.OptionName" : "new", "AnswerList.$.VoteCount" : 5 } }
Run Code Online (Sandbox Code Playgroud)
并删除:
var pull = Update<Vote>.Pull(x => x.AnswerList, builder => builder.EQ(q => q.OptionId, "2"));
collection.Update(Query.And(Query.EQ("_id", new BsonObjectId("50f3c313f216ff18c01d1eb0")), Query.EQ("AnswerList.OptionId", "2")), pull);
Run Code Online (Sandbox Code Playgroud)
探查:
"query" : { "_id" : ObjectId("50f3c313f216ff18c01d1eb0"), "AnswerList.OptionId" : "2" },
"updateobj" : { "$pull" : { "AnswerList" : { "OptionId" : "2" } } }
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用修改后的子集合更新父文档.