2

我有这个问题中描述的情况

我需要一些帮助来使用官方 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);
}

我感谢任何帮助,谢谢。

4

1 回答 1

1

没有更简单的方法,尽管如果考虑到这种类型的更新在 SQL 中所需的工作量,这并不是那么困难。

至于您的后续操作,C# 驱动程序返回 SafeModeResult(确保已打开安全模式)。此结果将具有 DocumentsAffected 属性,您可以在其中查看更新是否发生。如果没有,那么您需要将该值插入到数组中。

于 2012-05-14T17:25:30.100 回答