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)
- 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