この質問で説明されているような状況があります
公式の MongoDb C# ドライバーを使用してこのコードを作成するには、助けが必要です。
ドキュメント配列から 1 つのアイテムを更新するだけでなく、_arrayId を持つアイテムが存在しない場合は新しいアイテムを作成したいと考えています。また、同じ _arrayId を持つ 2 つの配列項目があってはなりません (使用しようとしまし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);
}
助けていただければ幸いです。