gpt4 book ai didi

C# 官方 MongoDB 驱动程序代码,用于更新(替换)MongoDB 文档中的内部数组

转载 作者:可可西里 更新时间:2023-11-01 10:44:40 27 4
gpt4 key购买 nike

我遇到了此 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);
}

感谢任何帮助,谢谢。

最佳答案

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

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

关于C# 官方 MongoDB 驱动程序代码,用于更新(替换)MongoDB 文档中的内部数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10587172/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com