Mongomapper查询集合问题

问题描述 投票:0回答:4

当我定义用户 has_many 会议时,它会自动创建一个“user_id” 与用户集合相关的键/值对。除了我不能运行任何 mongo_mapper 发现使用这个值,而不返回 nil 或 []。

Meeting.first(:user_id => "1234")

Meeting.all(:user_id => "1234")

Meeting.find(:user_id => "1234")

全部返回nil。还有其他语法吗?基本上我无法对自动生成的关联 ObjectId 运行查询。



# Methods

class User
  include MongoMapper::Document

  key :user_name, String, :required => true
  key :password, String

  many :meetings
end

class Meeting
  include MongoMapper::Document

  key :name, String, :required => true
  key :count, Integer, :default => 1
end


# Sinatra

get '/add' do
  user = User.new
  user.meetings  "foobar") #should read: Meeting.new(:name => "foobar")
  user.save
end

get '/find' do
  test = Meeting.first(:user_id => "4b4f9d6d348f82370b000001") #this is the _id of the newly create user
  p test # WTF! returns []
end
ruby orm mongodb sinatra mongomapper
4个回答
2
投票

正如Jimmy提到的关于检查Meeting.all,我认为你不会有任何东西。

根据上面的示例,我发现了一些潜在的问题。
- 您的用户需要 :user_name 所以它不会被保存
- 永远不会被保存,因为您没有设置所需的名称
- 您的会议也没有被保存
- 还有一件事,您需要将会议连接到 user.meetings

这适用于 mongo_mapper 0.6.10

require 'rubygems'
require 'mongo_mapper'
MongoMapper.database = "meetings"

class User
  include MongoMapper::Document

  key :user_name, String, :required => true
  key :password, String

  many :meetings
end

class Meeting
  include MongoMapper::Document

  key :name, String, :required => true
  key :count, Integer, :default => 1
end

user = User.create(:user_name => "Rubyist")
user.meetings  << Meeting.create(:name => "foobar")
user.save

Meeting.first(:user_id => user.id)
User.find(user.id).meetings

您可能已经明白了这一点,但无论如何我希望这对您有所帮助。


0
投票

您可以尝试使用

Meeting.find_by_user_id "1234"

此外,如果您运行脚本/控制台,那么 Meeting.all 是否会将每条记录显示为分配有 user_id?


0
投票

仅 User.find("1234").meetings 怎么样?


0
投票

如果您在使用 Mongomapper 查询 MongoDB 集合时遇到问题,您可能需要解决该问题。以下是使用 Mongomapper 诊断和解决查询相关问题的一些常见步骤:

检查您的模型和数据库配置:

确保您的 Mongomapper 模型已正确配置为连接到 MongoDB 数据库。 验证模型的键定义是否与 MongoDB 文档中的字段匹配。 检查语法错误:

检查查询代码是否存在语法错误,例如缺少括号、逗号或引号。 使用正确的集合名称:

仔细检查您是否正在查询正确的 MongoDB 集合。集合名称应与模型中指定的名称相匹配。 使用正确的查询方法:

Mongomapper 提供了各种查询方法,例如 all、first、last、find、where 等。确保您为特定查询使用适当的方法。 检查查询条件是否有错误:

如果您使用where方法进行查询,请确保您的条件指定正确。检查拼写错误或不正确的字段名称。 日志记录和调试:

启用 Mongomapper 日志记录或使用 MongoDB 的内置日志记录来查看正在生成并发送到数据库的查询。这可以帮助您识别查询构造中的问题。

Rails 中的 Mongomapper 日志记录配置示例:

Mongomapper.connection = Mongo::Connection.new('localhost', 27017, :logger => Logger.new(STDOUT))

在 MongoDB Shell 中测试您的查询:

要隔离问题,请尝试直接在 MongoDB shell 中运行类似的查询。这可以帮助确定问题是否出在查询或 Mongomapper 设置上。 检查错误消息:

如果您收到错误消息,请仔细阅读并分析它们。他们经常提供有关问题所在的宝贵信息。 更新 Mongomapper 和依赖项:

确保您使用的 Mongomapper 版本与 Ruby 和 MongoDB 版本兼容。有时,更新 Mongomapper 或其依赖项可以解决问题。 社区和文档:

向 Mongomapper 社区寻求帮助或查阅官方文档获取具体使用示例和常见问题的解决方案。 考虑迁移到不同的 ODM/ORM:

如果您仍然遇到 Mongomapper 问题,请考虑探索可能更适合您需求的替代对象文档映射 (ODM) 或对象关系映射 (ORM) 库。 请记住,诊断和解决与查询相关的问题有时可能很复杂,因此可能需要进行一些尝试和错误才能识别和解决问题。在故障排除过程中保持耐心并有条不紊。

© www.soinside.com 2019 - 2024. All rights reserved.