Mongomapper查询收集问题

时间:2010-01-15 00:19:48

标签: ruby orm mongodb sinatra mongomapper

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

Meeting.first(:user_id =>“1234”)

Meeting.all(:user_id =>“1234”)

Meeting.find(:user_id =>“1234”)

全部归零。还有另一种语法吗?基本上我不能对自动生成的关联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

3 个答案:

答案 0 :(得分: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

你可能已经想到了这一点,但我希望无论如何这都有用。

答案 1 :(得分:0)

您可以尝试使用

Meeting.find_by_user_id "1234"

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

答案 2 :(得分:0)

User.find(“1234”)。会议怎么样?