我正在嘗試使用MongoDB的C#驅動程序2.0進行練習。我不知道C#,所以我在Visual Basic中編寫代碼。Mongodb驅動程序2.0在VB.net中查找()不起作用
當我嘗試打印出列表代碼不會編譯。我知道我已將For Each內容註釋掉了,但這不是問題。我想查詢集合中所有文檔的數據庫,並將它們打印到文本框中。
下面是不工作的代碼。最後一部分給了我麻煩。
Private Sub btnListUsers_Click(sender As Object, e As EventArgs) Handles btnListUsers.Click
Dim ConnString As String
ConnString = txtConnStr.Text
Dim vDbName As String
vDbName = txtDb.Text
Dim vColName As String
vColName = txtColl.Text
Dim vClient As MongoClient
vClient = DbConnection(ConnString, vDbName, vColName)
Dim vDb As MongoDatabaseBase
vDb = vClient.GetDatabase(vDbName)
Dim vCol As IMongoCollection(Of BsonDocument)
vCol = vDb.GetCollection(Of BsonDocument)(vColName)
Dim query As BsonDocument
query = New BsonDocument("Names", txtListUsers.Text)
For Each item As BsonDocument In vCol.Find(query).ToListAsync()
'print a count
'print bson document
Next
End Sub
任何幫助表示讚賞。幾個小時以來,我一直在敲擊鍵盤。
以下是爲我工作後ALEX給我一個答案的代碼:
Private Async Sub btnListUsers_Click(sender As Object, e As EventArgs) Handles btnListUsers.Click
Dim ConnString As String
ConnString = txtConnStr.Text
Dim vDbName As String
vDbName = txtDb.Text
Dim vColName As String
vColName = txtColl.Text
Dim vClient As MongoClient
vClient = DbConnection(ConnString, vDbName, vColName)
Dim vDb As MongoDatabaseBase
vDb = vClient.GetDatabase(vDbName)
Dim vCol As IMongoCollection(Of BsonDocument)
vCol = vDb.GetCollection(Of BsonDocument)(vColName)
Dim query As BsonDocument
query = New BsonDocument("Name", txtListUsers.Text)
Dim myList As List(Of BsonDocument) = Await vCol.Find(query).ToListAsync()
Dim i As Integer = 0
For Each vItem As BsonDocument In myList
'count
i += 1
'print bson document
rtfDataDisplay.Text = rtfDataDisplay.Text & vbCrLf & "#" & i.ToString & " - " & vItem.ToString & vbCrLf
Next
End Sub
我不得不異步添加到子。我也有我的關鍵「名稱」不正確。之後,事情進展順利。嗚呼!
您編寫的代碼不會編譯,但您不包括編譯器在您的問題中產生的錯誤消息。你不認爲這可能有助於人們閱讀這個問題嗎?請[編輯]您的問題並添加此信息。順便說一句,ToListAsync()的返回類型是什麼?它是一個'foreach'可以用來枚舉的'IEnumerable'嗎? – Alex
我沒有在我面前的錯誤。我離開那臺電腦。當我今晚回家時,我會將這些信息添加到問題中。 – Trewaters
2.0驅動程序的所有方法都是異步的。 vCol.Find(query).ToListAsync()只會返回一個任務。您必須使用await或等待任務才能獲取實際列表,然後針對每個列表重複使用它。備用選項是使用vCol.Find(query).ForEach操作。你仍然需要等待這個taks。 – XtremeBytes