【问题标题】:Undefined method `collection' for #<Mongo::Client> Did you mean? collections (NoMethodError). Ruby#<Mongo::Client> 的未定义方法 `collection' 你的意思是?集合(NoMethodError)。红宝石
【发布时间】:2018-08-13 18:07:59
【问题描述】:

我正在使用自动化测试。这是我第一次使用 mongoDB。

因此,我正在尝试创建一个通用方法来查找所需集合中的文档,该集合将作为参数传递。我找到了一些例子,它们都使用.collection 方法。它似乎在我的项目中不起作用。

这是我的数据库客户端代码:

require 'mongo'
require 'singleton'

class DBClient
include Singleton
  def initialize
    @db_connection = Mongo::Client.new($env['database']['feature']['url'])
  end

  def find(collection, value)
    coll = @db_connection.collection(collection)
    coll.find(owner: 'value')
  end
end

这就是我如何实例化我的方法

DBClient.instance.find('collectionTest', 'Jhon')

当我运行测试时,我收到以下消息:

undefined method `collection' for #<Mongo::Client: cluster=localhost:>
  Did you mean?  collections (NoMethodError)

我使用的 gem 是 mongo (2.6.1)。

我做错了什么?

【问题讨论】:

    标签: ruby mongodb automated-tests


    【解决方案1】:

    基于documentation,Mongo::Client中确实没有方法集合。您正在寻找的是[] method。代码将如下所示:

    require 'mongo'
    require 'singleton'
    
    class DBClient
      include Singleton
    
      def initialize
        @db_connection = Mongo::Client.new($env['database']['feature']['url'])
      end
    
      def find(collection, value)
        coll = @db_connection[collection]
        coll.find(owner: value)
      end
    end
    

    编辑:我还更改了 find 本身的行。在您的原始代码中,它会找到所有者为“值”字符串的文档。我假设您希望将所有者与值匹配的文档发送到函数。

    【讨论】:

    • 成功了!非常感谢@václav!我真的很感谢你的帮助。最奇怪的是我在Mongo API documentation中找到了.collection方法。
    • @GabrielaVital 是 mongo 1.7.0 的文档,看起来很多 api 都发生了变化,例如在示例中,Mongo::Connection 在较新的 api 中不存在。可以在here 找到带有教程和其他内容的自述文件 - 请注意 url 中的 2.6.1。
    • 知道了!我会看看它。再次感谢! =)
    猜你喜欢
    • 1970-01-01
    • 2017-06-07
    • 2022-06-13
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多