VB.NET读写MongoDB

来源:互联网 发布:表格数据相同怎么合并 编辑:程序博客网 时间:2024/04/29 16:49

VB.NET读写MongoDB

MongoDB是一个基于分布式文件存储的数据库。由C++编写,旨在为WEB应用程序提供可扩展的高性能数据存储解决方案。

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。他所支持的查询语言非常强大,语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,还支持对数据建立索引。

MongoDB很好的实现了面向对象的思想,在MongoDB中每一条记录都是一个Document对象。他最大的优势在于所有的数据持久操作都无需开发人员手动编写SQL语句,直接调用方法就可以轻松实现CRUD操作。

本文中使用的mongodb驱动是1.9.2版本的。不适用于mongodb2.0版本以上的驱动。

Imports MongoDB.Driver.BuildersImports MongoDB.DriverImports MongoDB.Bson
初始化连接所要操作的文档集合

'所要连接的DB地址,逗号后的是备用的DB地址,不需要的话可以去掉Dim connectionString As String = "mongodb://192.168.0.35,192.168.0.34"'所要连接的DB名称Dim databaseString As String = "DBname"Dim mongoClient As MongoClient = New MongoClient(connectionString)Dim mongoServer As MongoServer = mongoClient.GetServer()Dim mongoDatabase As MongoDatabase = mongoServer.GetDatabase(databaseString)'要进行操作的集合Dim dbGather As MongoCollection(Of BsonDocument) = mongoDatabase.GetCollection(Of BsonDocument)("DBgather")

连接只读的复制集

Dim mongoClient As MongoClientDim mongoServer As MongoServerDim mongoDatabase As MongoDatabasemongoClient = New MongoClient("mongodb://192.168.0.93")mongoServer = mongoClient.GetServer()Dim databaseSetting As MongoDatabaseSettings = mongoServer.CreateDatabaseSettings("byx")databaseSetting.SlaveOk = TruemongoDatabase = mongoServer.GetDatabase(databaseSetting)Dim stdscore As MongoCollection(Of BsonDocument) = mongoDatabase.GetCollection(Of BsonDocument)("bscan")

新版推荐用法

mongoClient = New MongoClient("mongodb://192.168.0.92")MongoServer = mongoClient.GetServer()Dim databaseSetting As MongoDatabaseSettings = New MongoDatabaseSettings()databaseSetting.ReadPreference = MongoDB.Driver.ReadPreference.SecondarymongoDatabase = mongoServer.GetDatabase("byxstudy2", databaseSetting)

①新建文档及文档集合

InSert插入

Dim bsonDoc As BsonDocument = New BsonDocumentbsonDoc("sNo") = "2102040819920120"bsonDoc("scNo") = "88888888"franswerImage.Insert(bsonDoc)

UpSert。

UpSert是一种特殊的更新。如果没有符合检索条件的文档,就以该条件和更新文档为基础创建一个新的文档。如果找到了符合检索条件的文档则正常更新。

使用UpSert,即可以避免竞态问题,也可以减少代码量。

update的第三个参数就表示UpSert,默认为false

Dim QueryDoc as New QueryDocumentQueryDoc.Add("sNo","2102040819920120")Dim UpdateDoc As New UpdateDocumentDim tempDoc As New BsonDocumenttempDoc.Add("scN", "88888888")tempDoc.Add("UDT", Now)UpdateDoc.Add("$set", tempDoc)scanVerifyCol.Update(QueryDoc, UpdateDoc, UpdateFlags.Upsert)


②条件检索

检索一条数据

Dim bsonQuery = New QueryDocument()      bsonQuery("_id") = New ObjectId("55cd5917522e341f20a3cbed")bsonQuery("scNo") = "88888888"Dim oneData As BsonDocument = dbGather.FindOne(bsonQuery)

检索所有数据

Dim allImage As MongoCursor(Of BsonDocument) = dbGather.Find(bsonQuery)For Each bson In allImage      Dim studentNo as String  =  bson("scNo")Next
or

For Each bson In dbGather.Find(stdchoiceQuery)Dim studentNo as String  =  bson("scNo")Next
③模糊检索

如果用到正则表达式,则需引用

Imports System.Text.RegularExpressions
‘Mongodb中模糊检索以"210302"开头的sNo字段Dim bsonQuery = New QueryDocument()Dim scNStr As String = "210302"Dim scNQuery As BsonElement = New BsonElement("sNo", New Regex("^" + scNStr + ".*$"))bsonQuery.Add(scNQuery)Dim oneData As BsonDocument = dbGather.FindOne(bsonQuery)
模糊检索,并删除符合条件的文档
Dim bsonQuery As New QueryDocumentbsonQuery("sNo") = New BsonRegularExpression("/^" + "210302" + "/")dbGather.Remove(bsonQuery)
检索文档中是否存在该字段

Dim bsonDoc As BsonDocument = New BsonDocumentbsonDoc.Add("$exists", True)answerSheetErrorQuery.Add("sNo", bsonDoc)
$in的使用

Dim bsonDoc As BsonDocument = New BsonDocumentDim bsArray As BsonArray = New BsonArray()For i = 33 To 47      bsArray.Add(i.ToString)NextbsonDoc.Add("$in", bsArray)stdscoreQuery.Add("sNo", bsonDoc)

检索两时间点之间的数据
‘通过DateTimePicker获取日期时间Dim dateTo As Date = DateTimePicker1.ValueDim dateFromstr As String = DateTimePicker2.Value.ToString.Split(" ")(0)‘去掉DateTimePicker2的时间,只留日期Dim dateFrom As Date = New DateTime(dateFromstr.Split("/")(0), dateFromstr.Split("/")(1), dateFromstr.Split("/")(2), 0, 0, 0)Dim schoolNo As String = TextBox1.Text Dim testNo As String = TextBox2.Text‘检索在dateFrom与dateTo之间的"UDT"字段Dim stdscoreQuery As New QueryDocument() Dim fDate As BsonDocument = New BsonDocument("$lte", dateFrom) Dim tDate As BsonDocument = New BsonDocument("$gte", dateTo)Dim dateQuery As New QueryDocument() Dim df As BsonElement = New BsonElement("$lte", dateFrom)dateQuery.Add(df)Dim dt As BsonElement = New BsonElement("$gte", dateTo)dateQuery.Add(dt)stdscoreQuery.Add("UDT", dateQuery) Dim errorQuestion As MongoCursor(Of BsonDocument) = stdscore.FindOne(stdscoreQuery)

④批量更新,批量插入

有时候需要更新一组多条数据,就可以用批量更新批量插入

批量插入:

Dim bsonList As List(Of BsonDocument) = New List(Of BsonDocument)For i = 0 to 100Dim temp As BsonDocument = New BsonDocument    temp("score") = 0    temp("schoolNo") = "88888888"    bsonList.Add(temp)NextDim scoreQuery As New QueryDocumentscoreQuery("tId") = "asd12ewqasd13eqwsdadsx"scoreQuery("sN") = "888888"socore.Remove(scoreQuery)socore.InsertBatch(bsonList)

update可以用于修改DB中的数据。更新操作是原子操作,如果多个更新同时发生,则所有的更新都会执行。

更新可以分为两种,整体更新和局部修改。

整体更新就是文档替换。

局部修改则是通过原子的更新修改器实现的,使用修改器时,除了_id值不能改变外,其他值都可以修改。

批量更新:

'批量更新_id = bscanTempIdBsonArray中的数据的status为4Dim statusUpdate As New UpdateDocument("$set", New BsonDocument("status", "4"))Dim upDateQuery As New QueryDocumentDim temp As BsonDocument = New BsonDocumentDim bscanTempIdBsonArray As BsonArray = New BsonArray()bscanTempIdBsonArray.Add(New ObjectId("55fbd4bf522e341f74b4b960"))bscanTempIdBsonArray.Add(New ObjectId("55fbd4bf522e341ac4b4bf62"))bscanTempIdBsonArray.Add(New ObjectId("55fbd4bf522ede1f74b4bs61"))bscanTempIdBsonArray.Add(New ObjectId("55fbd4bf522e342s74b4b910"))temp.Add("$in", bscanTempIdBsonArray)upDateQuery.Add("_id", temp)bscantemp.Update(upDateQuery,statusUpdate, UpdateFlags.Multi)

⑤findAndModify

findAndModify会返回符合查询条件的更新后的文档。

且一次只更新一个文档,也就是检索Query条件,且执行sort后的第一个文档。

Dim tempQuery As New QueryDocumentDim tempDoc As BsonDocument = New BsonDocument'检索条件tempQuery.Add("status", 1)tempQuery.Add("decode", Nothing)'检索后更新的内容Dim UpdateDoc As New BsonDocumentUpdateDoc.Add("decode", 1)Dim tempUpdate As New UpdateDocument("$set", UpdateDoc)Dim tempUpdateArgs As New FindAndModifyArgs()tempUpdateArgs.Query = tempQuerytempUpdateArgs.Update = tempUpdatebscanWorkSpace.FindAndModify(tempUpdateArgs)




暂时就想到这么多~
1 0