c#mongoDb 2.0字典中不存在

Ori*_*ael 6 c# mongodb mongodb-.net-driver

我想更新一个只包含一些Id的集合和一个objectId的字典到objectId.

public class ME_BlaBla
{
    [BsonId]
    public ObjectId MyId;
    public Dictionary<ObjectId, ObjectId> IdsToOtherIds;
}
Run Code Online (Sandbox Code Playgroud)

对不起,如果我的名字没有提供信息,我无法分享实际代码=.

现在,我有这个问题:

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)));
Run Code Online (Sandbox Code Playgroud)

所以,我试图按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)));
Run Code Online (Sandbox Code Playgroud)

mac*_*iek 2

Builders<ME_BlaBla>.Filter.Not(Builders<ME_BlaBla>.Filter.Exists(t => t.IdsToOtherIds.Values, valueId))
Run Code Online (Sandbox Code Playgroud)

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

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

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