vs 2019でvb.netでフォームプログラムを作成してmongodb 4.2を接続する方法


そういえば、Mongodb公式のインターフェースドキュメントを見るのは悪夢です。mongodb公式は大きな力を使ってAPIを整理しましたが、簡単なインターフェースの羅列、0コードモデル、開始できません。幸いにも多くの天才がいて、翻訳に成功して、私はやっと彼らの歩く道に沿って、猫の絵虎の歩くことに従って歩き続けます。プロジェクト全体の構造は以下の通りです。

クラスファイルのvbtest.vbデータベースエンティティ類は、mongodbドキュメントvbtestに対応しており、データ操作テストに使用されます。

Imports MongoDB.Bson

Public Class vbtest
 Public _id As ObjectId
 Public content As String
End Class

(optionl)vbmongo.vbは、データベースエンティティ類vbtestを結合したバージョンです。

Imports MongoDB.Bson
Imports MongoDB.Driver

Public Class vbmongo
 Public client
 Public collection As IMongoCollection(Of vbtest)
 Public database As IMongoDatabase
 Public mlist As List(Of vbtest)
 Public builder As FilterDefinitionBuilder(Of vbtest) = New FilterDefinitionBuilder(Of vbtest)
 Public filter As FilterDefinition(Of vbtest)
 Public Sub New(ByVal dbname As String, ByVal collectionname As String)
  client = New MongoClient("mongodb://127.0.0.1:27017")
  database = client.GetDatabase(dbname)
  collection = database.GetCollection(Of vbtest)(collectionname)
 End Sub

 Public Async Function loadrecords() As Task(Of List(Of vbtest))
  filter = builder.Ne(Of ObjectId)("_id", New ObjectId())//_id       ,                   Builder                Ne(Of TField)
  Dim mlist As List(Of vbtest) = Await collection.Find(filter).ToListAsync()//TField      type of field                   OBjectId  String  
  Return mlist
 End Function
 Public Async Function loadone(ByVal _id As String) As Task(Of vbtest)
  filter = builder.Eq(Of ObjectId)("_id", New ObjectId(_id))
  Dim mlist As vbtest = Await collection.Find(filter).FirstOrDefaultAsync()
  Return mlist
 End Function

 Public Async Function updateone(ByVal _id As String, ByVal doc As vbtest) As Task(Of vbtest)
  filter = builder.Eq(Of ObjectId)("_id", New ObjectId(_id))
  Dim up As UpdateDefinitionBuilder(Of vbtest) = New UpdateDefinitionBuilder(Of vbtest)()
  Dim updef As UpdateDefinition(Of vbtest)
  updef = up.Set(Of String)("content", doc.content)
  '.Set(Of String)("content", doc)
  collection.UpdateOneAsync(filter, updef)
 End Function

End Class
そういえば、mongodbの接続は何段階に分けられますか?接続文字列によってリンクを開いて、データベースを取得して、ドキュメントを取得して、さらにドキュメントの基礎の上で添削して調べます。vb.netで操作するmongodbについては、cxiの操作例によって、vb.netの文法的特徴に基づいて模写されています。
まずプロジェクトにNugetパッケージのインストールが必要です。私達が探しているのはMongoDB.Driverです。

ここでvb.netの汎型VbmongoTを作成しました。単一の検索、検索リストと更新操作だけを書いています。関数の中にはAyncとAwaitキーワードがたくさんあります。この機能を識別するためには非同期プログラムが使用されています。フォームプログラムで呼び出しを行う時も、ペアにAync Awaitのキーワードを使う必要があります。非同期関数が返ってくるのは、Task<TResult>タイプ(c龚)またはTask(Of TResult)(vb.net)が、呼び出し関数体の中でawaitキーワードを使って最終結果Imports Mongo DB.BsonImports MongoDB.Driverを得る必要があるからです。

Public Class vbmongoT(Of T)
 Public client
 Public collection As IMongoCollection(Of T)
 Public database As IMongoDatabase
 Public mlist As List(Of T)
 Public builder As FilterDefinitionBuilder(Of T) = New FilterDefinitionBuilder(Of T)
 Public up As UpdateDefinitionBuilder(Of T)
 Public updef As UpdateDefinition(Of T)
 Public filter As FilterDefinition(Of T)
 Public Sub New(ByVal dbname As String, ByVal collectionname As String)
  client = New MongoClient("mongodb://127.0.0.1:27017")
  database = client.GetDatabase(dbname)
  collection = database.GetCollection(Of T)(collectionname)
 End Sub

 Public Async Function loadrecords() As Task(Of List(Of T))
  filter = builder.Ne(Of ObjectId)("_id", New ObjectId())
  Dim mlist As List(Of T) = Await collection.Find(filter).ToListAsync()
  Return mlist
 End Function
 Public Async Function loadone(ByVal _id As String) As Task(Of T)
  filter = builder.Eq(Of ObjectId)("_id", New ObjectId(_id))//_id         ,Builder                :  Ne(Of TField)
  Dim mlist As T = Await collection.Find(filter).FirstOrDefaultAsync() 
  Return mlist 
 End Function 
 Public Async Function updateone(ByVal filter As FilterDefinition(Of T), ByVal updef As UpdateDefinition(Of T)) As Task(Of T) 
  'updef = up.Set(Of String)("content", doc.content) '.Set(Of String)("content", doc) 
  Await collection.UpdateOneAsync(filter, updef) 
 End Function 
End Class
mongodbのバージョンの公式APIでは、IMongo Collectionのオブジェクトは検索、追加、更新、削除などの動作の発信者です。この中で検索、更新、削除はすべて検索条件を使用しています。
正式にはfilterと言います。C〓(といいます。):FilterDefinition<T>VB.net:FilterDefinition(Of T)
フィルターはフィルタ金型のモデリング結果です。
フィルタ金型:C菷:FilterDefinitionBulder<T>VB.net:FilterDefinitionBulder(Of T)
Mongodb.Driverという大きなカテゴリーの下で、FilterDefinitionBuilderの紹介https://mongodb.github.io/mongo-csharp-driver/2.10/apidocs/html/T_モングDB_Driver_FilterDefinitionBulder u1.httmを直接見ることを提案します。
同じデータベースドキュメントの更新操作は、UpdateDefinitionBuiderで更新フィールドを設定した後に発生するUpdateDefinitionで行われます。
フォームプログラム部分

Imports MongoDB.Bson
Imports MongoDB.Driver

Public Class Form1
 Public client
 Public bsdoc As vbtest
 Public collection As IMongoCollection(Of vbtest)
 Public database As IMongoDatabase
 Public mlist As List(Of vbtest)
 Public builder As FilterDefinitionBuilder(Of vbtest) = New FilterDefinitionBuilder(Of vbtest)
 Public vm As vbmongoT(Of vbtest) = New vbmongoT(Of vbtest)("meandmycoach", "vbtest")
 Public filter As FilterDefinition(Of vbtest)
 Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  bsdoc.content = RichTextBox1.Text
  vm.filter = vm.builder.Eq(Of ObjectId)("_id", New ObjectId(ComboBox1.Text))
  vm.up = New UpdateDefinitionBuilder(Of vbtest)
  vm.updef = vm.up.Set(Of String)("content", bsdoc.content)
  'vm.up.Set(Of String)("content", bsdoc.content)
  vm.updef = vm.up.Combine(vm.updef)
  vm.updateone(vm.filter, vm.updef)

 End Sub

 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  vm = New vbmongoT(Of vbtest)("meandmycoach", "vbtest")
  Dim bsdoc As vbtest = New vbtest()
 End Sub

 Private Async Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click
  mlist = Await vm.loadrecords()
  For i As Integer = 0 To mlist.Count - 1
   ComboBox1.Items.Add(mlist(i)._id.ToString())
  Next
  ComboBox1.Text = ComboBox1.Items(0)
  Label2.Text = mlist.Count.ToString()
 End Sub

 Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox1.TextChanged

 End Sub

 Private Async Sub ComboBox1_TextChanged(sender As Object, e As EventArgs) Handles ComboBox1.TextChanged
  bsdoc = Await vm.loadone(ComboBox1.Text)
  RichTextBox1.Text = bsdoc.content
 End Sub

 Private Async Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged

 End Sub
End Class
機能説明:画像をクリックすることにより、すべてのvbtestドキュメントの記録をロードし、ObjectIdを表示するために専用のcompbox 1を使用し、ToString()方法で通常の文字列に変換することができます。
コンボボックスObjectIdの変更に伴い、richtext 1コントロールは、vbtestエンティティクラスの対応するレコードのConttetフィールドをロードし、フィールドの内容を変更して、更新して提出ボタンをクリックしてドキュメントを完成するUpdateOneAsync操作ができます。
締め括りをつける
以上で、vs 2019についてvb.netでフォームプログラムを作成して、mongodb 4.2に接続する文章を紹介しました。もっと関連したvs 2019について、mongodb 4.2に接続する内容は以前の文章を検索してください。または、下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。