2013-06-10 2 views
0

Мне нужно запустить коллекцию на Mongoid, но в этой коллекции нет модели, поэтому я не могу ее использовать: Project.collection.map_reduce(..., :query => scoped.selector) Кто-нибудь знает, как я могу это сделать? СпасибоИспользуйте коллекцию на mongoid, которая не имеет модели

+0

Какие Mongoid версию вы используете? – rubish

ответ

1

Вот ответ/пример, который работает для Mongoid 3.1.5/Moped 1.5.1, надеюсь, что это поможет. Пожалуйста, ответьте на вашу информацию о версии, если хотите что-то более конкретное для вашей среды. Обратите внимание, что, поскольку у вас нет модели Mongoid, вы теряете возможности уровня ODM и должны опускаться до уровня драйвера Moped.

тест/блок/session_test.rb

require 'test_helper' 
require 'pp' 

class SessionTest < ActiveSupport::TestCase 
    def setup 
    @session = Mongoid.default_session 
    @collection_name = 'project' 
    @collection = @session[@collection_name] 
    @collection.drop 
    end 

    test "collection map-reduce without model" do 
    puts "\nMongoid::VERSION:#{Mongoid::VERSION}\nMoped::VERSION:#{Moped::VERSION}" 
    docs = [ 
     {'name' => 'Charlie', 'gender' => 'M', 'age' => 11}, 
     {'name' => 'Lucy', 'gender' => 'F', 'age' => 13}, 
     {'name' => 'Sally', 'gender' => 'F', 'age' => 15}, 
     {'name' => 'Linus', 'gender' => 'M', 'age' => 11}, 
     {'name' => 'Snoopy'}, 
    ] 
    @collection.insert(docs) 
    assert_equal docs.size, @collection.find.to_a.size 
    pp @session.command(
      :mapReduce => @collection_name, 
      :map => 'function(){ emit(this.gender, this.age); }', 
      :reduce => 'function(key, values){ return Array.sum(values)/values.length; }', 
      :out => { :inline => 1 }, 
      :query => { 'age' => { '$exists' => true } } 
    )['results'] 
    end 
end 

$ рейка тест

Run options: 

# Running tests: 

[1/1] SessionTest#test_collection_map-reduce_without_model 
Mongoid::VERSION:3.1.5 
Moped::VERSION:1.5.1 
[{"_id"=>"F", "value"=>14.0}, {"_id"=>"M", "value"=>11.0}] 
Finished tests in 0.111151s, 8.9968 tests/s, 8.9968 assertions/s. 
1 tests, 1 assertions, 0 failures, 0 errors, 0 skips 
Смежные вопросы