我遇到了这个question
中描述的情况我需要一些帮助来使用官方MongoDb C#驱动程序编写此代码。
我不仅希望从文档数组更新一个项目,而且如果没有_arrayId这样的项目,也想创建新项目。此外,不应该有两个具有相同_arrayId的数组项(我曾尝试使用AddToSet
但没有运气)。
这是一个令人头痛的问题;我希望有更简单的方法来实现这一目标。
var actionUpdate = Update.Set("Votes.$", vote.ToBsonDocument());
var actionPush = Update.Push("Votes", vote.ToBsonDocument());
var actionPull = Update.Pull("UserId", vote.UserId);
var querySpecific = Query.And(
Query.EQ("_id", new ObjectId(_contentId)),
Query.EQ("Votes.UserId", vote.UserId));
var queryPromise = Query.EQ("_id", new ObjectId(_contentId));
MongoCollection collection = null;
if (_type == ContentType.Promise)
collection = DataService.PromiseSet.Collection;
var userVotes = collection.Count(querySpecific);
if (userVotes == 1)
{
collection.Update(querySpecific, actionUpdate);
}
else if (userVotes == 0)
{
collection.Update(queryPromise, actionPush);
}
else
{
collection.Update(queryPromise, actionPull);
collection.Update(queryPromise, actionPush);
}
感谢任何帮助,谢谢。
答案 0 :(得分:1)
没有一种更简单的方法,尽管如果考虑这种类型的更新在SQL中需要的工作量并不困难。
对于您的后续操作,C#驱动程序返回一个SafeModeResult(确保打开safemode)。此结果将具有DocumentsAffected属性,您可以在其中查看更新是否发生。如果没有,那么您将要将值插入数组中。