Ruby 如何使用“查找”修复未找到的文档错误

Ruby 如何使用“查找”修复未找到的文档错误,ruby,mongodb,mongoid,Ruby,Mongodb,Mongoid,我有一个Person集合,存储在遗留mongodb服务器(2.4)中,并通过ruby mongodb驱动程序使用mongoid gem进行访问 如果我执行 Person.where(email: 'some.existing.email@server.tld').first Person.find(the_very_same_id_obtained_above) 我得到一个结果(假设我将id存储在一个名为“上面获得的非常相同的id”的变量中) 如果我执行 Person

我有一个Person集合,存储在遗留mongodb服务器(2.4)中,并通过ruby mongodb驱动程序使用mongoid gem进行访问

如果我执行

    Person.where(email: 'some.existing.email@server.tld').first
    Person.find(the_very_same_id_obtained_above)
我得到一个结果(假设我将id存储在一个名为“上面获得的非常相同的id”的变量中)

如果我执行

    Person.where(email: 'some.existing.email@server.tld').first
    Person.find(the_very_same_id_obtained_above)
我有一个

    Mongoid::Errors::DocumentNotFound
例外情况

如果我使用javascript语法执行查询,就会找到结果

   Person.where("this._id == #{the_very_same_id_obtained_above}").first # this works!
我目前正在尝试将数据迁移到新版本。目前,Mongodbre正在AmazonDocumentDB上进行存储,以进行测试(Mongodb3.6兼容),问题仍然存在

我注意到的一点是,这些对象ID是特殊的:

5ce24b1169902e72c9739ff6无论如何,这是可行的

59DE48F53137EC054B00004这需要技巧

id末尾的少量零似乎与问题高度相关(我不知道原因)。

这是默认值:

 # Raise an error when performing a #find and the document is not found.
 # (default: true)
 raise_not_found_error: true
资料来源:


如果这不能回答您的问题,那么
find
方法很可能在代码中的某个地方被覆盖

你说:>Person.find(上面获得的非常相同的id),但是,
上面获得的非常相同的id在你的问题中没有定义。它指的是在第一次查询中找到的人的id。很可能你在代码中的某个地方出错了,并且没有查询数据库返回的id。可能涉及到意外的类型转换。另一种可能是您正在使用其他有bug的旧软件。ID可以由应用程序生成,不需要采用特定格式。考虑创建一个小而完整的复制案例来说明这个问题。