0

我正在尝试从与给定 ID 匹配的 mongodb 集合中查找特定用户。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
4

1 回答 1

0

首先,您必须拥有Option Strict Off该代码才能编译。那很糟。您应该立即上交Option Strict On项目属性并解决它提出的所有问题。其中之一是您GetCollectionByName没有声明返回类型。这意味着这里:

Dim list = collection.Find(filter).ToList()

collection变量是隐式类型Object,并且您在调用该方法时依赖后期绑定,Find因为Object该类没有这样的方法。因此,您无法从 Intellisense 获得帮助,如果您正确执行此操作,Intellisense 会告诉您哪些成员可用和不可用。

无论如何,如果您确实阅读了有关您使用的类型的文档以查看它们拥有哪些成员,那么您仍然可以使其工作。是您在该GetCollectionByName方法中使用的接口的文档,我不了解您,但我没有看到Find那里列出的任何方法。有一种FindSync方法,所以也许这就是你真正想要的。如果您在Option Strict On任何地方都拥有并使用了正确的类型,Intellisense 就会向您展示这一点。

您还应该上交Option Strict OnIDE 选项,以便它On适用于所有未来的项目。

我查看了一些MongoCollectionImplfor Java 的文档,那里似乎有一个find方法,但这并不一定意味着相同的方法在 .NET 中可用,而且您也不能直接使用该类。您正在使用 ,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)您可能也应该重命名该方法或更改实现。如果方法返回列表,则名称不应表明它返回单个项目。

于 2020-11-28T03:02:58.227 回答