我正在尝试使用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