VB.NET读写MongoDB

VB.NET读写MongoDB

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

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

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

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

Imports MongoDB.Driver.Builders
Imports MongoDB.Driver
Imports 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 MongoClient
Dim mongoServer As MongoServer
Dim mongoDatabase As MongoDatabase

mongoClient = New MongoClient("mongodb://192.168.0.93")
mongoServer = mongoClient.GetServer()
Dim databaseSetting As MongoDatabaseSettings = mongoServer.CreateDatabaseSettings("byx")
databaseSetting.SlaveOk = True
mongoDatabase = 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.Secondary
mongoDatabase = mongoServer.GetDatabase("byxstudy2", databaseSetting)

①新建文档及文档集合

InSert插入

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

UpSert。

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

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

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

Dim QueryDoc as New QueryDocument
QueryDoc.Add("sNo","2102040819920120")

Dim UpdateDoc As New UpdateDocument
Dim tempDoc As New BsonDocument
tempDoc.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 QueryDocument
bsonQuery("sNo") = New BsonRegularExpression("/^" + "210302" + "/")
dbGather.Remove(bsonQuery)
检索文档中是否存在该字段

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

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

检索两时间点之间的数据
‘通过DateTimePicker获取日期时间
Dim dateTo As Date = DateTimePicker1.Value
Dim 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 100
Dim temp As BsonDocument = New BsonDocument
    temp("score") = 0
    temp("schoolNo") = "88888888"
    bsonList.Add(temp)
Next
Dim scoreQuery As New QueryDocument
scoreQuery("tId") = "asd12ewqasd13eqwsdadsx"
scoreQuery("sN") = "888888"
socore.Remove(scoreQuery)
socore.InsertBatch(bsonList)

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

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

整体更新就是文档替换。

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

批量更新:

'批量更新_id = bscanTempIdBsonArray中的数据的status为4
Dim statusUpdate As New UpdateDocument("$set", New BsonDocument("status", "4"))
Dim upDateQuery As New QueryDocument
Dim temp As BsonDocument = New BsonDocument

Dim 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 QueryDocument
Dim tempDoc As BsonDocument = New BsonDocument

'检索条件
tempQuery.Add("status", 1)
tempQuery.Add("decode", Nothing)

'检索后更新的内容
Dim UpdateDoc As New BsonDocument
UpdateDoc.Add("decode", 1)
Dim tempUpdate As New UpdateDocument("$set", UpdateDoc)

Dim tempUpdateArgs As New FindAndModifyArgs()
tempUpdateArgs.Query = tempQuery
tempUpdateArgs.Update = tempUpdate
bscanWorkSpace.FindAndModify(tempUpdateArgs)




暂时就想到这么多~
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值