'Public 成员 'Find' 类型 'MongoCollectionImpl(Of BsonDocument)' 未找到。
'Public member 'Find' on type 'MongoCollectionImpl(Of BsonDocument)' not found.'
我正在尝试从 mongodb 集合中查找与给定 ID 匹配的特定用户。 Folliwng 是我的 VB.Net 代码。但是,我不断收到错误 'Public member 'Find' on type 'MongoCollectionImpl(Of BsonDocument)' not found.'
Public Function GetCollectionByName(ByVal collectionName As String)
Dim db As IMongoDatabase = DBcontext()
Dim collection As IMongoCollection(Of BsonDocument)
collection = db.GetCollection(Of BsonDocument)(collectionName)
Return collection
End Function
Public Function GetUser(ByVal id As String)
Dim filter = Builders(Of BsonDocument).Filter.Eq(Of String)("ID", id)
Dim collection = GetCollectionByName("Users")
Dim list = collection.Find(filter).ToList()`<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ERROR here
Return list
End Function
首先,您必须 Option Strict Off
才能使该代码编译。那很糟。您应该立即在项目属性中打开 Option Strict On
并解决它提出的所有问题。其中之一就是您的 GetCollectionByName
没有声明 return 类型。这意味着这里:
Dim list = collection.Find(filter).ToList()
那个 collection
变量是隐式类型 Object
并且你在调用那个 Find
方法时依赖于后期绑定,因为 Object
class 没有这样的方法。因此,您无法从 Intellisense 获得任何帮助,如果您正确执行此操作,Intellisense 会告诉您哪些成员可用,哪些成员不可用。
无论如何,如果您确实阅读了您正在使用的类型的文档以查看它们有哪些成员,您仍然可以让它工作。 Here 是您在该 GetCollectionByName
方法中使用的接口的文档,我不了解您,但我没有看到那里列出任何 Find
方法。有一个 FindSync
方法,所以也许这就是您真正想要的。如果您有 Option Strict On
并且在每个地方都使用了正确的类型,Intellisense 会告诉您这一点。
您还应该在 IDE 选项中打开 Option Strict On
,以便以后的所有项目都是 On
。
我查看了 Java 的 MongoCollectionImpl
的一些文档,那里似乎有一个 find
方法,但这并不一定意味着相同的方法是在 .NET 中可用,并且您不会直接使用 class。您正在使用 IMongoCollection
因此您应该只使用该接口的成员。基本上,您的代码需要看起来更像下面的 Option Strict On
:
Public Function GetCollectionByName(ByVal collectionName As String) As IMongoCollection(Of BsonDocument)
Dim db As IMongoDatabase = DBcontext()
Dim collection As IMongoCollection(Of BsonDocument)
collection = db.GetCollection(Of BsonDocument)(collectionName)
Return collection
End Function
Public Function GetUser(ByVal id As String) As List(Of BsonDocument)
Dim filter = Builders(Of BsonDocument).Filter.Eq(Of String)("ID", id)
Dim collection = GetCollectionByName("Users")
Dim list = collection.FindSync(filter).ToList()
Return list
End Function
如果您想使用接口,您可能需要将 GetUser
方法声明为 IList(Of BsonDocument)
类型。您可能应该重命名该方法或也更改实现。如果方法是 return 列表,那么名称不应表明它 return 是单个项目。
我正在尝试从 mongodb 集合中查找与给定 ID 匹配的特定用户。 Folliwng 是我的 VB.Net 代码。但是,我不断收到错误 'Public member 'Find' on type 'MongoCollectionImpl(Of BsonDocument)' not found.'
Public Function GetCollectionByName(ByVal collectionName As String)
Dim db As IMongoDatabase = DBcontext()
Dim collection As IMongoCollection(Of BsonDocument)
collection = db.GetCollection(Of BsonDocument)(collectionName)
Return collection
End Function
Public Function GetUser(ByVal id As String)
Dim filter = Builders(Of BsonDocument).Filter.Eq(Of String)("ID", id)
Dim collection = GetCollectionByName("Users")
Dim list = collection.Find(filter).ToList()`<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ERROR here
Return list
End Function
首先,您必须 Option Strict Off
才能使该代码编译。那很糟。您应该立即在项目属性中打开 Option Strict On
并解决它提出的所有问题。其中之一就是您的 GetCollectionByName
没有声明 return 类型。这意味着这里:
Dim list = collection.Find(filter).ToList()
那个 collection
变量是隐式类型 Object
并且你在调用那个 Find
方法时依赖于后期绑定,因为 Object
class 没有这样的方法。因此,您无法从 Intellisense 获得任何帮助,如果您正确执行此操作,Intellisense 会告诉您哪些成员可用,哪些成员不可用。
无论如何,如果您确实阅读了您正在使用的类型的文档以查看它们有哪些成员,您仍然可以让它工作。 Here 是您在该 GetCollectionByName
方法中使用的接口的文档,我不了解您,但我没有看到那里列出任何 Find
方法。有一个 FindSync
方法,所以也许这就是您真正想要的。如果您有 Option Strict On
并且在每个地方都使用了正确的类型,Intellisense 会告诉您这一点。
您还应该在 IDE 选项中打开 Option Strict On
,以便以后的所有项目都是 On
。
我查看了 Java 的 MongoCollectionImpl
的一些文档,那里似乎有一个 find
方法,但这并不一定意味着相同的方法是在 .NET 中可用,并且您不会直接使用 class。您正在使用 IMongoCollection
因此您应该只使用该接口的成员。基本上,您的代码需要看起来更像下面的 Option Strict On
:
Public Function GetCollectionByName(ByVal collectionName As String) As IMongoCollection(Of BsonDocument)
Dim db As IMongoDatabase = DBcontext()
Dim collection As IMongoCollection(Of BsonDocument)
collection = db.GetCollection(Of BsonDocument)(collectionName)
Return collection
End Function
Public Function GetUser(ByVal id As String) As List(Of BsonDocument)
Dim filter = Builders(Of BsonDocument).Filter.Eq(Of String)("ID", id)
Dim collection = GetCollectionByName("Users")
Dim list = collection.FindSync(filter).ToList()
Return list
End Function
如果您想使用接口,您可能需要将 GetUser
方法声明为 IList(Of BsonDocument)
类型。您可能应该重命名该方法或也更改实现。如果方法是 return 列表,那么名称不应表明它 return 是单个项目。