【问题标题】:Mongoid Syntax QuestionsMongoid 语法问题
【发布时间】:2011-05-15 06:13:05
【问题描述】:

1) 按实例对象查找

假设我有一个名为@topic 的实例对象。我想检索这个给定主题的答案。我在想我应该能够传入:topics=>@topic,但我必须在下面做非常难看的查询。

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

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

  def sid
    return id.to_s
  end

【问题讨论】:

    标签: mongoid


    【解决方案1】:

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

    @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

    【讨论】:

    • 嗯,您给出的示例似乎不起作用 - 我做错了什么吗? @answers = @user.answers.where(:topic_ids.in => @topic.id)
    • 对不起,我带你走错路了。对于此类查询,您不应使用 $in 运算符(或 .in Mongoid 符号扩展)。请查看更新后的答案。
    猜你喜欢
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 2014-12-17
    相关资源
    最近更新 更多