2013-06-27 7 views
7

Tak jak sugeruje tytuł. Nie mogę znaleźć niczego związanego z Mongoidem 3. Rzeczy, które znalazłem dotyczą tylko starych wersji mongoid, które nie używały Moped.Funkcje sklepowe w mongodb przy użyciu Mongoid 3

znalazłem to i to nie działa:

def self.install_javascript 
    getWeekJs = Rails.root.join("lib/javascript/getWeek.js") 
    if collection.master['system.js'].find_one({'_id' => "getWeek"}).nil? 
    collection.master.db.add_stored_function("getWeek", File.new(getWeekJs).read) 
    end 
end 

Ta metoda będzie dodać funkcję getWeek do kolekcji system.js.

Jak można to zrobić w mongoid 3?

Odpowiedz

5

Przybity!

Kody:

class StoredProcedure 
    include Mongoid::Document 
    store_in collection: "system.js" 

    field :_id, type: String, default: "" 

    def self.test 
    equalsJS = Rails.root.join("lib/assets/javascripts/equals.js") 
    code = Moped::BSON::Code.new(File.new(equalsJS).read) 
    unless where(id: "equals").first 
     proc = new(value: code) 
     proc._id = "equals" 
     proc.save 
    end 
    end 
end 

wyjaśnienie:

Używam system.js w mongoid jakby to było normalne kolekcja. Po prostu dodajemy nowe dokumenty.

WAŻNE:

Wartość musi być Moped::BSON::Code instancja inaczej zostanie on zapisany jako ciąg, więc bezużyteczny. Identyfikator musi być nazwą tej funkcji. Nie mogłem podać identyfikatora w instrukcji create, dlatego dodałem wiele kroków.

Po prostu dodaj to do zadania rake, aby upewnić się, że po wdrożeniu dodano wszystkie wymagane funkcje do mongo.

+1

znalazłeś sposób, aby faktycznie * uruchomić * przechowywany javascript? –

Powiązane problemy