VB.NET読み書きMongoDB

7819 ワード

VB.NET読み書きMongoDB
MongoDBは、分散ファイルに基づいて格納されるデータベースです.C++によって作成され、WEBアプリケーションに拡張性の高い高性能データストレージソリューションを提供することを目的としています.
MongoDBは、リレーショナル・データベースと非リレーショナル・データベースの間に介在する製品で、非リレーショナル・データベースの中で最も機能が豊富で、リレーショナル・データベースに最も似ています.彼がサポートしているデータ構造は非常に緩やかで、jsonのようなbsonフォーマットであるため、比較的複雑なデータ型を格納することができる.彼がサポートするクエリー言語は非常に強く、構文はオブジェクト向けのクエリー言語に似ており、リレーショナル・データベースの単一テーブル・クエリーのほとんどの機能を実現し、データのインデックス化もサポートしています.
MongoDBはオブジェクト向けのアイデアをうまく実現し,MongoDBでは各レコードがDocumentオブジェクトである.彼の最大の利点は、開発者がSQL文を手動で作成する必要がなく、直接メソッドを呼び出すことでCRUD操作を簡単に実現できることです.
本明細書で用いるmongodb駆動は1.9である.2バージョンです.mongodb 2には適用されません.バージョン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.
UpSetは特別な更新です.検索条件に一致するドキュメントがない場合は、その条件と更新ドキュメントに基づいて新しいドキュメントを作成します.検索条件に一致するドキュメントが見つかった場合は、正常に更新されます.
UpSertを使用すると,競合問題を回避し,コード量を減らすことができる.
updateの3番目のパラメータは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)

2つの時点間のデータの取得
‘  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のデータを変更するために使用できます.更新操作は原子操作であり、複数の更新が同時に発生すると、すべての更新が実行されます.
更新は、全体更新とローカル修正の2つに分けられます.
全体的な更新は、ドキュメントの置き換えです.
ローカル修正は原子の更新モディファイヤによって実現されます.モディファイヤを使用する場合、_を除きます.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は、クエリー条件に一致する更新されたドキュメントを返します.
一度に1つのドキュメントのみを更新する、すなわち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)

しばらく思っていたのですが~