gpt4 book ai didi

c# mongoDb 2.0 字典中不存在

转载 作者:IT老高 更新时间:2023-10-28 13:30:01 26 4
gpt4 key购买 nike

我想将只包含一些 Id 和 objectId 字典的集合更新为 objectId。

public class ME_BlaBla
{
[BsonId]
public ObjectId MyId;
public Dictionary<ObjectId, ObjectId> IdsToOtherIds;
}

对不起,如果我的名字不能提供信息,我不能分享真实的代码 =。

现在,我有这个查询:

var filter = Builders<ME_BlaBla>.Filter.And(
Builders<ME_BlaBla>.Filter.Eq(t => t.MyId, id),
Builders<ME_BlaBla>.Filter.Not(Builders<ME_BlaBla>.Filter.Exists(t => t.IdsToOtherIds.Values, valueId)),
Builders<ME_BlaBla>.Filter.Not(Builders<ME_BlaBla>.Filter.Exists(t => t.IdsToOtherIds.Keys, keyId)));

所以,我试图按 MyId 字段进行过滤,但是当我想向那里插入数据时,我不想要任何类型的重复,而不是在 Keys也不在 Values

整个想法是更新必须是原子的,并检查字典中是否包含提供的 id。

我仍在尝试了解如何在这里使用 Exists 过滤器,所以它可能是答案。

TIA。

编辑

我将代码更改为类似的代码:(仍然不确定它是否运行良好..无法在 atm 测试它)

Builders<ME_BlaBla>.Filter.Not(Builders<ME_BlaBla>.Filter.ElemMatch(t => t.IdsToOtherIds, a => a.Key == keyId)),
Builders<ME_BlaBla>.Filter.Not(Builders<ME_BlaBla>.Filter.ElemMatch(t => t.IdsToOtherIds, a => a.Value == valueId)));

最佳答案

Builders<ME_BlaBla>.Filter.Not(Builders<ME_BlaBla>.Filter.Exists(t => t.IdsToOtherIds.Values, valueId))

这部分代码不会检查 valueId 值是否存在于 Values 属性中(这是 ObjectId 类型的元素列表) 字段的 Dictionary (这就是你的意思,我猜)。 Exists 检查文档是否包含特定字段;您可以检查您的收藏文档是否有“字典”或“姓氏”字段。

如果您在应用程序中需要一个唯一值,您是否可以在某处创建一个单例类来生成某个序列的下一个(因此也是唯一的)值?

您的 Dictionary 可能被序列化为文档数组,因此如果您需要检查文档是否已存在于集合中,则需要使用 AnyIn (或其他一些) 而不是 Exists.

关于c# mongoDb 2.0 字典中不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34771080/

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