说起来,查看mongoDB官方的接口文档是场噩梦,尽管monGodb官方花了大力气整顿了它的api,但是简单的接口罗列,0代码示范,让人无从开始。幸亏有很多天才,成功破译,我才得以沿着他们走的路,照猫画虎的走下去。整个项目结构如下: 类
说起来,查看mongoDB官方的接口文档是场噩梦,尽管monGodb官方花了大力气整顿了它的api,但是简单的接口罗列,0代码示范,让人无从开始。幸亏有很多天才,成功破译,我才得以沿着他们走的路,照猫画虎的走下去。整个项目结构如下:
Imports MongoDB.Bson
Public Class vbtest
Public _id As ObjectId
Public content As String
End Class
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,完全是根据C#的操作范例,根据vb.net的语法特点临摹出来的。
首先需要对项目进行Nuget包的安装,我们要搜寻的是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里,IMongoCollection对象是查找,添加,更新,删除等动作的发起者,这里面查找,更新,删除都要用到查询条件,
官方谓之filter(过滤器)C#: FilterDefinition
而过滤器是过滤器模具的建模结果
过滤器模具:C#: FilterDefinitionBuilder
在Mongodb.Driver这个大类下面 建议直接翻看FilterDefinitionBuilder的介绍 https://mongodb.GitHub.io/mongo-csharp-driver/2.10/apidocs/html/T_MongoDB_Driver_FilterDefinitionBuilder_1.htm
同样的数据库文档的更新操作由 UpdateDefinitionBuilder 设置更新字段后产生的 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文档记录,combobox1专门用于显示ObjectId,可以通过ToString()方法转换为普通字符串
随着下拉框ObjectId的改变,richtext1控件加载 vbtest实体类对应记录的Content字段,可以更改字段内容后 点击 更新提交 按钮完成文档的UpdateOneAsync操作
vs2019 下用 vb.net窗体程序连接 mongodb4.2
原文地址:Https://www.cnblogs.com/saintdingspage/p/13437549.html
--结束END--
本文标题: vs2019 下用 vb.net窗体程序连接 mongodb4.2
本文链接: https://lsjlt.com/news/7699.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-10-23
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0