vs 2019でvb.netでフォームプログラムを作成してmongodb 4.2を接続する方法
8250 ワード
そういえば、Mongodb公式のインターフェースドキュメントを見るのは悪夢です。mongodb公式は大きな力を使ってAPIを整理しましたが、簡単なインターフェースの羅列、0コードモデル、開始できません。幸いにも多くの天才がいて、翻訳に成功して、私はやっと彼らの歩く道に沿って、猫の絵虎の歩くことに従って歩き続けます。プロジェクト全体の構造は以下の通りです。
クラスファイルのvbtest.vbデータベースエンティティ類は、mongodbドキュメントvbtestに対応しており、データ操作テストに使用されます。
(optionl)vbmongo.vbは、データベースエンティティ類vbtestを結合したバージョンです。
まずプロジェクトに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を得る必要があるからです。
正式には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で行われます。
フォームプログラム部分
コンボボックスObjectIdの変更に伴い、richtext 1コントロールは、vbtestエンティティクラスの対応するレコードのConttetフィールドをロードし、フィールドの内容を変更して、更新して提出ボタンをクリックしてドキュメントを完成するUpdateOneAsync操作ができます。
締め括りをつける
以上で、vs 2019についてvb.netでフォームプログラムを作成して、mongodb 4.2に接続する文章を紹介しました。もっと関連したvs 2019について、mongodb 4.2に接続する内容は以前の文章を検索してください。または、下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。
クラスファイルの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に接続する内容は以前の文章を検索してください。または、下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。