Mongoid语法问题

时间:2010-11-24 17:32:40

标签: mongoid

1)按实例对象查找

假设我有一个名为@topic的实例对象。我想检索这个给定主题的答案。我以为我应该可以传入:topics => @topic,但我不得不在下面进行非常丑陋的查询。

  @answers = Answers.where(:topic_ids => {"$in" => [@topic.id]})

2)获取id的字符串表示。我有一个自定义功能(如下所示)。但这不应该是一个非常普遍的要求吗?

  def sid
    return id.to_s
  end

1 个答案:

答案 0 :(得分:2)

如果您的关联设置正确,您应该能够:

@topic.answers

听起来上面就是你要找的东西。确保您已正确设置关联。 Mongoid在定义关联时非常宽容,所以当references_manyreferenced_in中存在名称不匹配等问题时,似乎可以正确设置它们。

如果有充分的理由说明上述方法不起作用并且您必须使用查询,则可以使用此简单查询:

@answers = Answer.where(:topic_ids => @topic.id)

这将匹配其topic_ids包含提供的ID的任何Answer记录。对于数组字段,语法与Answer.where(:title => 'Foo')等单值字段的语法相同。 MongoDB将根据字段是否为数组(检查提供的值是否在数组中)或单个值(检查提供的值是否匹配)来不同地解释查询。

以下是有关MongoDB如何处理数组查询的更多信息: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ValueinanArray