CouchDBとCはかります.EFcoreのようなクエリ!


このポストでは、どのようにクエリを参照してくださいCouchDB からC# LINQを使う!
私は図書館を利用して数年後、今日はV 3に達した.0.0CouchDB.NET .

CouchDBとは
Apache CouchDB 分散文書データベースとそのレプリケーションプロトコルはサーバから携帯電話やウェブブラウザに利用可能である.
話すJSON ネイティブは、使用するときに素晴らしいですJavascript , でも使うとき.NET JSONのダイナミックな性格のため痛いかもしれません.

どのようにCouchDB.ネットヘルプ
あなたが働いたならばEntity Framework 以前に、このライブラリはよく見るかもしれません.

セットアップ
クリエイトユアCouchContext データベースのリストを使用して認証を設定します.

Rebel is of type CouchDocument as it contains things like Id, Rev, Attachments, and others.


public class MyDeathStarContext : CouchContext
{
    public CouchDatabase<Rebel> Rebels { get; set; }

    protected override void OnConfiguring(CouchOptionsBuilder optionsBuilder)
    {
      optionsBuilder
        .UseEndpoint("http://localhost:5984/")
        .EnsureDatabaseExists()
        .UseBasicAuthentication(username: "anakin", password: "empirerule");
    }
}

LINQを使う
ライブラリはネイティブをサポートします.NET LINQ , SQL文のような構文.
await using var context = new MyDeathStarContext();
var skywalkers = await context.Rebels
    .Where(r => 
        r.Surname == "Skywalker" && 
        (
            r.Battles.All(b => b.Planet == "Naboo") ||
            r.Battles.Any(b => b.Planet == "Death Star")
        )
    )
    .OrderByDescending(r => r.Name)
    .ThenByDescending(r => r.Age)
    .Take(2)
    .Select(
        r => r.Name,
        r => r.Age
    })
    .ToListAsync();

データベースへの送信
{
  "selector": {
    "$and": [
      {
        "surname": "Skywalker"
      },
      {
        "$or": [
          {
            "battles": {
              "$allMatch": {
                "planet": "Naboo"
              }
            }
          },
          {
            "battles": {
              "$elemMatch": {
                "planet": "Death Star"
              }
            }
          }
        ]
      }
    ]
  },
  "sort": [
    { "name": "desc" },
    { "age": "desc" }
  ],
  "limit": 2,
  "fields": [
    "name",
    "age"
  ]
}
これは自動的にクエリを最適化します.
ちょうどいくつかの名前を付ける
  • マージ多重Where 呼び出し
  • フィルタから無駄な状態を取り除くWhere(r => true || r.Age == 19) );
  • 変換SingleOrDefault(d => condition) to Where(d => condition).Take(2).SingleOrDefault() ;
  • 変換Max(d => d.Property) to OrderByDescending(d => d.Property).Take(1).Select(d => d.Property).Max()

  • その他の機能
    年では、より多くの機能が追加されている.
    例えば、
  • 文書の追加/更新/削除;
  • インデックスの追加/更新/削除;
  • データベース唾消し
  • ビュー
  • 地方文書
  • ユーザー管理;

  • 依存性注入
    あなたが働くならばAsp.NET Core エーDI package が利用可能です.
    それは、依存関係を登録するのと同じくらい簡単ですStartup :
    services.AddCouchContext<MyDeathStarContext>(builder => builder
        .UseEndpoint("http://localhost:5984")
        .UseBasicAuthentication(username: "admin", password: "admin"));
    
    それからコンテキストを入力します.
    public class RebelsController : Controller
    {
        private readonly MyDeathStarContext _context;
    
        public RebelsController(MyDeathStarContext context)
        {
            _context = context;
        }
    }
    

    最後に
    あなたが働くならばCouchDB and C# 私は非常にライブラリをチェックすることをお勧めします.
    すべてのことを見ることができますREADME そして、あなたが何を考えるかについて知らせてください.