【问题标题】:Mongoid `group()` conditionsMongoid `group()` 条件
【发布时间】:2011-09-08 21:39:33
【问题描述】:

我想为我在 Mongoid 中的分组提供一个条件,但是如何在条件哈希中为一个属性发送多个值?这就是我想做的:

PageViews.collection.group(
  cond: {page_id: ['4e6912618083ab383e000010', '4e6912618083ab383e000009']},
  key: 'timestamp',
  initial: {count: 0},
  reduce: "function(x, y) {y.count += x.count;}"
)

因此,任何带有page_idPageView 都将是查询的一部分,但我似乎根本无法让条件哈希(cond)工作!我在这里做错了什么,我真的很困惑。

这里是 group() 方法的 API 文档:http://api.mongodb.org/ruby/current/Mongo/Collection.html#group-instance_method

任何帮助将不胜感激。


更新

这样运行查询:

PageViews.collection.group(
  cond: {page_id: { $in : ['4e6912618083ab383e000010', '4e6912618083ab383e000009']}},
  key: 'timestamp',
  initial: {count: 0},
  reduce: "function(x, y) {y.count += x.count;}"
)

返回以下错误,但语法对我来说很好:

SyntaxError: (irb):170: syntax error, unexpected ':', expecting tASSOC
  cond: {page_id: { $in : ['4e6912618083ab383e000010',...
                         ^
(irb):170: syntax error, unexpected '}', expecting $end
...', '4e6912618083ab383e000009']}},
...                               ^
    from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.1.0/lib/rails/commands/console.rb:45:in `start'
    from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.1.0/lib/rails/commands/console.rb:8:in `start'
    from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.1.0/lib/rails/commands.rb:40:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

令人沮丧的是,在任何地方都没有这样的例子,文档说条件参数是这样的:

(String, BSON::Code) :cond — 默认值:{} — 指定 用于过滤运行聚合的文档的查询 (可选)。

那么如果需要StringBSON::Code,这会是什么样子?

【问题讨论】:

    标签: ruby-on-rails ruby mongodb mongoid


    【解决方案1】:

    您需要使用$in 进行查询以匹配多个值。所以应该写成

    PageViews.collection.group(
      :cond => {:page_id => { '$in' => ['4e6912618083ab383e000010', '4e6912618083ab383e000009']}},
      :key => 'timestamp',
      :initial => {count: 0},
      :reduce => "function(x, y) {y.count += x.count;}"
    )    
    

    您可以在此处阅读更多信息:http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24in

    【讨论】:

    • 嗯,好像给我一个语法错误:(irb):158: syntax error, unexpected '}', expecting $end ...', '4e6912618083ab383e000009']}}, ...
    • 你把左括号放在page_id:$in之间了吗?
    • 非常感谢您的帮助,我更新了我的问题,说明发生了什么。
    • 我现在自己复制了它。 Weird - Mongoid 必须有与普通 Mongo 不同的语法。
    • 我想我需要将它作为 javascript 提供给 MongoDB 阅读,你知道我该怎么做吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 2012-10-07
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多