objectIdのオブジェクトIDと辞書を含むコレクションを更新したいと思います。c#mongoDb 2.0が辞書に存在しない
public class ME_BlaBla
{
[BsonId]
public ObjectId MyId;
public Dictionary<ObjectId, ObjectId> IdsToOtherIds;
}
私の名前が有益でない場合は、私は実際のコード=を共有することはできません。だから、イムMyId
フィールドでフィルタしようとしているが、私はそこにデータを挿入したいとき、私はあらゆる種類の重複を望んでいない、いないで
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)));
:
は今、私はこのクエリを持っていますKeys
もValues
全体のアイデアは、更新がアトミックでなければならず、指定されたIDのどちらも辞書に含まれていないことを確認することです。
私はまだここでExists
フィルタの使用方法を理解しようとしています。その答えかもしれません。
TIA。
EDIT
私はそのような何かにコードを変更:(まだわからないその作業は、ATMそれをテストwell..cannot)
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)));
辞書を正しく使用しているかどうかわからないため、テーブルの簡単な説明を共有する必要があります。このフィールドIdsToOtherIdsは正しいとは思われません。 –
コード内にvalueIdとkeyIdとは何ですか?それは何を表していますか?あなたは「キーも値もどちらの値でもない」と言っていますが、シリアライゼーションに基づいて、これはあなたがそこで表現しているものではありません。あなたのシリアライゼーションは、{_id:ObjectId(xxx)、ObjectId(yyyy):ObjectId(zzzz)、ObjectId(yyyy1):ObjectId(zzzz1)、...}のようになります。 –
私はそれをより簡単にする方法を知りません。私は辞書を持っていると想像してください。 辞書にはキーと値があります。私は2つの異なるIDを提供するとき、私はId1が辞書のキーにないようにしたい、そしてid2は辞書の値にないだろう。 ここには何が欠けているのか分かりません。私はデータベースに格納されているクラス全体を提供し、どのような種類のテーブルの説明が不足しているのですか? –