c# mongoDb 2.0 在字典中不存在

本文关键字:字典 不存在 mongoDb | 更新日期: 2023-09-27 18:30:24

我想将一个只包含一些 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过滤器,因此这可能是答案。

蒂亚。

编辑

我将代码更改为类似的东西:(仍然不确定它运行良好。无法测试它 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)));

c# mongoDb 2.0 在字典中不存在

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

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

如果你在应用程序中需要一个唯一的值,你能在某个地方创建一个单例类来生成某个序列的下一个(因此是唯一的)值吗?

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

你可以像这样用你的条件来查看嵌套列表的存在,

https://docs.mongodb.org/manual/core/read-operations-introduction/

在您的州,您可以将字典用作 2 个这样的联合标准,

https://docs.mongodb.org/manual/reference/operator/query/elemMatch/

干杯!