【问题标题】:Store functions in mongodb using Mongoid 3使用 Mongoid 3 在 mongodb 中存储函数
【发布时间】:2013-06-24 19:08:42
【问题描述】:

正如标题所暗示的那样。我找不到与 Mongoid 3 相关的任何内容。我找到的内容仅适用于未使用 Moped 的旧版本的 mongoid

我发现了这个,但它不起作用:

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

此方法会将 getWeek 函数添加到 system.js 集合中。

如何在 mongoid 3 中做到这一点?

【问题讨论】:

    标签: ruby-on-rails mongoid3


    【解决方案1】:

    成功了!

    代码:

    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
    

    解释:

    我在mongoid 中使用system.js,就好像它是一个普通的集合一样。然后我只是添加新文档。

    重要提示:

    该值必须是Moped::BSON::Code 实例,否则将被保存为字符串,因此无用。 id 必须是函数的名称。我无法在创建语句中指定 id,因此我添加了多个步骤。

    只需将此添加到 rake 任务中,以确保在部署后将所有必需的功能添加到 mongo。

    【讨论】:

    • 您找到了真正运行存储的javascript的方法吗?
    猜你喜欢
    • 2013-08-13
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 2016-10-09
    • 1970-01-01
    • 2013-03-28
    相关资源
    最近更新 更多