首页 > 解决方案 > # 的未定义方法“集合”你的意思?集合(NoMethodError)。红宝石

问题描述

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

我做错了什么?

标签: rubymongodbautomated-tests

解决方案


根据文档,Mongo::Client 中确实没有方法集合。您正在寻找的是[] 方法。代码将如下所示:

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 本身改变了行。在您的原始代码中,它会找到所有者为“值”字符串的文档。我假设您想要所有者与发送到函数的值匹配的文档。


推荐阅读