sql >> データベース >  >> NoSQL >> MongoDB

C#SDKを使用した別のタイプへの投影

    必要なマッピングを実行する方法を見つけました:

    collection
        .Find(Builders<MyType>.Filter.AnyIn(x => x.Documents, new[] { "c" }))
        .Project(Builders<MyType>.Projection.Exclude(c => c.Documents))
        .As<MySubType>()
        .ToList();
    

    ただし、最初に、余分な要素を無視してサブタイプのマッピングを登録する必要があります。私はそれを100%理解していません、ドライバーのバグのようです、それはDocumentsを取得しません mongoからですが、そのMyType そのような特性を持っています。 にクラスマッピングを登録する必要があることに注意してください 最初にこのタイプのコレクションを作成します。

    if (!BsonClassMap.IsClassMapRegistered(typeof(MySubType)))
    {
        BsonClassMap.RegisterClassMap<MySubType>(cm =>
        {
            cm.AutoMap();
            cm.SetIgnoreExtraElements(true);
        });
    }
    

    サンプルデータでやりました:

    var toInsert = new List<MyType>
    {
        new MyType {Id = 1, Name = "bla", Documents =new List<string> {"a", "b", "v"}},
        new MyType {Id = 2, Name = "ada", Documents =new List<string> {"c", "d", "r"}},
    };
    

    そして、期待される出力を得ることができます:

    collection
        .Find(Builders<MyType>.Filter.AnyIn(x => x.Documents, new[] { "c" }))
        .Project(Builders<MyType>.Projection.Exclude(c => c.Documents))
        .As<MySubType>()
        .ToList()
        .Dump();
    




    1. PHPからのMongoDBコレクションrunCommand

    2. レコードに不足している日付を入力します

    3. 忙しい負荷でRedisが接続できません

    4. MongoDBでupdate()とsave()のパフォーマンスを向上させる方法は?