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

MongodbC#から特定のフィールド値を読み取ります

    非構造化データがコンパイル時または実行時に認識されているかどうかに応じて、これを実現する方法はいくつかあります。

    コンパイルタイプの場合、データのプロジェクションをモデル化し、プロジェクションビルダーを使用してプロジェクションがどのように機能するかを指定できます

    var collection = database.GetCollection<Customer>("customers");
    
    var document = new Customer(){Name = "Joe Bloggs", Age = 30, Address = "York"};
    collection.InsertOne(document);
    
    var projection = Builders<Customer>
                        .Projection
                        .Include(x => x.Id).Include(x => x.Age);
    
    var customerProjection = await collection.Find(x => true)
                        .Project<CustomerProjection>(projection)
                        .FirstAsync();
    

    上記では、戻り型を総称引数として指定しましたが、これを省略すると、BsonDocumentが返されます。 用途によっては便利です

    var bsonDocument = await collection.Find(x => true)
                        .Project(projection)
                        .FirstAsync();
    

    linq式を使用しても同じ結果を得ることができます:

    var projection = await collection.Find(x => true)
        .Project(x => new {x.Id, x.Age}).FirstAsync();
    

    これにより、IDと年齢を含む匿名型が返されます。

    ただし、コンパイル時にデータがわからず、実行時にマジックストリングのフィールドに基づいている場合は、BsonDocumentを渡す必要があります。 GetCollectionへ 方法:

    var collection = database.GetCollection<BsonDocument>("customers");
    

    これで、上記の両方の方法でbsonドキュメントを投影できるようになりますが、フィールドごとに行われます。

    ただし、プロジェクトビルダーを使用すると、作業が少し楽になるので、試してみることをお勧めします。

    var projectionDefinition = Builders<BsonDocument>.Projection
                                            .Include("age")
                                            .Exclude("_id");
    
    var projection = await collection.Find(x => true)
                        .Project(projectionDefinition)
                        .FirstAsync();
    



    1. Meteorは、別のドロップダウンが選択されたときにドロップダウンを動的にフィルタリングします

    2. MongoDb C#ドライバー、IListを実装するタイプのプロパティが保存されない

    3. MongoDBelemMatchサブドキュメント

    4. MongoDB変更ストリームを使用したリアルタイムデータストリーミング