rails ruby-on-rails mongodb mongoid

ruby-on-rails - rails - mongoid php



¿Cómo consultar MongoDB directamente desde Ruby en lugar de usar Mongoid? (6)

Estoy escribiendo una migración para una aplicación Rails que usa MongoDB y Mongoid. Actualmente, mi migración usa mis modelos que usan Mongoid para consultar y actualizar registros, pero el rendimiento es inferior a la media. Básicamente, estoy actualizando todos los registros en una gran colección y haciendo n + 20 consultas. Maté la migración después de tardar una hora en correr localmente (y no terminé). Me gustaría poder ejecutar consultas en bruto a mongo sin demasiado esfuerzo. Supongo que hay alguna forma de acceder a un controlador Mongo desde Mongoid ya que Mongoid ya ha cargado una conexión a la base de datos. ¿Cómo puedo acceder a la base de datos para ejecutar mis consultas de actualización directamente?


Aquí cómo lo haces (esto también funcionaría para 2+ y 3+)

1) Todos los modelos que exhiben este comportamiento incluyen Mongoid :: Document dentro de todo el modelo, por lo que técnicamente cada documento se asigna en monogodb a través del controlador de ciclomotor o mongodb-ruby a través de mongoid

asi que si tienes modelo Like

class PerformerSource include Mongoid::Document ## Definition end

Ahora puede ejecutar Mongo Query usando el controlador (controlador de ciclomotor o mongodb-ruby) como este

PerformerSource.collection.insert("something") ## where something is json document you want to insert

Esto le daría a U la conexión del ciclomotor (si usa mongoid 3) para ese documento

2) También puedes hacerlo algo como esto.

Mongoid::Sessions.default.collections.find { |document| document.name == "performer_sources"}.insert("something")

Cómo obtener más información sobre la consulta de Mongo y cómo se pueden asignar mongoides a los usuarios de moped u puede seguir this sección de consultas donde describe cómo se realiza internamente la consulta a través de moped

Espero que esto ayude


Como alguien ha mencionado aquí, tu respuesta es ciclomotor. Aquí está mi ejemplo para una secuencia de comandos ruby ​​(simple archivo test.rb)

  1. Defina un mongoid.yml (en este caso, en localhost)

development: sessions: default: database: test_development hosts: - localhost:27017 options: 2. Configurar la configuración de carga y la colección de prueba

#!/usr/bin/env ruby require ''mongoid'' Mongoid.load!("path/to/file/mongoid.yml",:development) # :development corresponds to mongoid.yml first line environment db = Mongoid::Sessions.default puts "Collection documents count :> #{db[:collection].find.count}"


La respuesta corta es Moped . Esta es la API de nivel inferior en la que se basa Mongoid y estará disponible si ya usa Mongoid. La API del ciclomotor es una envoltura delgada alrededor de las operaciones en bruto de MongoDB. La documentación aquí: http://mongoid.org/en/moped/docs/driver.html debería ser útil.


Para Mongoid 5:

db = Mongoid::Clients.default collection = db[:collection_name]

Ahora podemos realizar consultas en la colección.


Si está utilizando Mongoid 3, proporciona un acceso fácil a su controlador MongoDB: Moped . Este es un ejemplo de acceso a algunos datos sin procesar sin usar Modelos para acceder a los datos:

db = Mongoid::Sessions.default # inserting a new document collection = db[:collection_name] collection.insert(name: ''my new document'') # finding a document doc = collection.find(name: ''my new document'').first # iterating over all documents in a collection collection.find.each do |document| puts document.inspect end


Si usas mongoid 5 (cinco), recomendaría usar esto.

Item.collection.update_one({_id: BSON::ObjectId(''55512b7070722d22d3050000'')}, ''$set'' => { ''category_name'': ''Test'' })

El truco para esto es el BSON :: ObjectID. Esto es como en la consulta de mongo si desea buscar un único ID.

db.items.update({ ''_id'': ObjectId("55512b7070722d22d3050000") }, { $set: {''category_name'': ''Test'' } })

Arriba está la versión mongo de la consulta. Encontré que la conversión de código ruby ​​a código mongo es la parte difícil, ya que hay algunas piezas que pueden ser un poco difíciles de encontrar en la documentación.

http://www.rubydoc.info/gems/mongo/Mongo%2FCollection%3Aupdate_one