#<mongo :: client>的未定义方法'collection'是什么意思?集合(NoMethodError)。红宝石

时间:2018-08-13 18:08:00

标签: ruby mongodb automated-tests

我正在使用自动化测试。这是我第一次使用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)

我正在使用的宝石是mongo(2.6.1)。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

基于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

编辑:我也用查找本身更改了这一行。在您的原始代码中,它将找到所有者为“值”字符串的文档。我想您希望将所有者与值匹配的文档发送到该函数。