如何在PowerShell中读取MongoDB 5.0集合并解决Find方法不存在报错
问题原因
- 适配MongoDB 5.0的MongoDB .NET 2.x及以上版本驱动中,
Find是扩展方法,PowerShell原生不支持直接通过集合实例调用扩展方法,必须显式调用扩展方法所属的静态类MongoDB.Driver.IMongoCollectionExtensions。 - 你代码中注释掉了返回类型为
MongoDB.Bson.BsonDocument的集合获取逻辑,默认返回PSObject类型的集合对象,类型不匹配也可能导致方法匹配失败。
修复方案
你可以任选以下任意一种方案修复:
方案1:显式调用扩展方法类执行Find
将最后一行$collection.find($query)替换为以下代码:
[MongoDB.Driver.IMongoCollectionExtensions]::Find($collection, $query).ToList()
如果需要返回标准Bson格式结果,可以把获取集合的代码改成你注释的版本:
$Collection = Get-MongoDBCollection $database $collectionName -returnType ([MongoDB.Bson.BsonDocument])
方案2:改用同步FindSync方法
驱动内置的FindSync是集合实例原生支持的同步查询方法,PowerShell可以直接调用,将最后一行替换为:
$cursor = $collection.FindSync($query) $cursor.ToList()
附加优化建议
你的代码中重复加载了MongoDB.Bson.dll和MongoDB.Driver.dll,可以删掉重复的Add-Type语句避免运行警告。
内容的提问来源于stack exchange,提问作者kuldeep Singh
相关产品推荐
相关产品推荐

