【问题标题】:Find documents including element in Array field with mongomapper?使用 mongomapper 在 Array 字段中查找包含元素的文档?
【发布时间】:2012-01-08 00:18:48
【问题描述】:

我是 mongodb/mongomapper 的新手,无法找到答案。

我有一个带有以下字段的 mongomapper 类

key :author_id, Integer
key :partecipant_ids, Array

假设我有一个具有以下属性的“记录”:

{ :author_id => 10, :partecipant_ids => [10,15,201] }

我想检索所有涉及 id 为 15 的参与者的对象。 我没有在文档中找到任何提及。

奇怪的是,以前我在做这个查询

MessageThread.where :partecipant_ids => [15]

这有效,但在(可能)gem/mongodb 版本发生一些变化之后,它停止了工作。 不幸的是,我不知道我以前使用的是哪个版本的 mongodb 和 mongomapper。

【问题讨论】:

  • 你现在用的是什么版本的 rails/mongomapper/mongodb 等?
  • rails 3.0.10、mongo (1.5.0)、mongo_mapper (0.10.1)

标签: ruby mongodb mongomapper


【解决方案1】:

在当前版本的 MongoMapper 中,这将起作用:

MessageThread.where(:partecipant_ids => 15)

这应该也可以...

MessageThread.where(:partecipant_ids => [15])

...因为 plucky 自动将其扩展为:

MessageThread.where(:partecipant_ids => { :$in => [15] })

(见https://github.com/jnunemaker/plucky/blob/master/lib/plucky/criteria_hash.rb#L121

我想说看看您的数据并在 Mongo 控制台中尝试查询,以确保您有一个有效的查询。 MongoDB 查询直接转换为 MM 查询,除了上述(和其他一些次要的)警告。见http://www.mongodb.org/display/DOCS/Querying

【讨论】:

  • 另请参阅 plucky 测试,它们可能比源代码更清晰:github.com/jnunemaker/plucky/blob/master/test/plucky/…
  • 奇怪的事实。使用 MessageThread.where(:partecipant_ids => ['15']) 它可以工作。出于某种原因,它现在被视为字符串数组?我 100% 确定在升级之前它使用的是整数。
  • 您可以尝试将 :typecast => 'Integer' 添加到您的 :partecipant_ids 密钥中。我不确定这是否会破坏许多 :in 关联。
猜你喜欢
  • 2016-04-23
  • 1970-01-01
  • 1970-01-01
  • 2011-02-13
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-10
相关资源
最近更新 更多