2
MongoDB的驅動程序代碼就像這個questionC#官方更新文件(替換)內陣列MongoDB中
我需要一些幫助,使用官方的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);
}
我感謝任何幫助,謝謝。
我用盲目的小貓用buildinq請求執行了一個小時,並完成了一些像我想要的工作。 但它看起來很糟糕=) Plz給我很好的參考閱讀關於使用SafeModeResult和審查我的代碼,如果它不會打擾你很多。 –
這對我來說似乎是一個很好的解決方案。關於醜陋的問題,我希望這個問題會被隔離在一個看不到那麼多的地方。在這種情況下,只要它有效,它看起來並不重要。 –