Encontrar registros de MongoDB en lotes usando Mongoide [CERRADO] -- ruby campo con ruby-on-rails campo con database campo con mongodb camp codereview Relacionados El problema

Finding mongodb records in batches using mongoid [closed]


1
vote

problema

Español
cerrado. Esta pregunta es off-topic . Actualmente no está aceptando respuestas.

¿Quieres mejorar esta pregunta? Actualizar la pregunta por lo que es on-topic para el intercambio de pila de revisión de código.

cerrado hace 4 años .

Mejorar esta pregunta

Quiero obtener registros en lotes. Pero el documento Mongoide dice que evite el uso de Skip, ya que puede ser caro. Escribí este método para iterar a través de un gran número de registros de manera eficiente.

  module Mongoid   module Batches     def find_each(batch_size = 1000)       return to_enum(:find_each, batch_size) unless block_given?       find_in_batches(batch_size) do |documents|        documents.each { |document| yield document }      end    end    def find_in_batches(batch_size = 1000)      return to_enum(:find_in_batches, batch_size) unless block_given?      documents = self.asc(:created_at).limit(batch_size).asc(:id).to_a      while documents.any?        documents_size = documents.size        primary_key_offset = documents.last.id         yield documents        break if documents_size < batch_size        documents = self.where(:id.gt => primary_key_offset).asc(:created_at).limit(batch_size).asc(:id).to_a      end    end  end end Mongoid::Criteria.include Mongoid::Batches   
Original en ingles

I want to get records in batches. But mongoid doc says to avoid using skip due as it can be expensive. I wrote this method to iterate through a large number records efficiently.

module Mongoid   module Batches     def find_each(batch_size = 1000)       return to_enum(:find_each, batch_size) unless block_given?       find_in_batches(batch_size) do |documents|        documents.each { |document| yield document }      end    end    def find_in_batches(batch_size = 1000)      return to_enum(:find_in_batches, batch_size) unless block_given?      documents = self.asc(:created_at).limit(batch_size).asc(:id).to_a      while documents.any?        documents_size = documents.size        primary_key_offset = documents.last.id         yield documents        break if documents_size < batch_size        documents = self.where(:id.gt => primary_key_offset).asc(:created_at).limit(batch_size).asc(:id).to_a      end    end  end end Mongoid::Criteria.include Mongoid::Batches 
           
 
 

Lista de respuestas

0
 
vote

En realidad, no hay necesidad de tomar de esta manera desde que el cursor de Mongodb por defecto devuelve lotes

 

Actually there is no need to take this way since mongodb cursor by defaults returns batchwise

 
 
 
 
0
 
vote

Este código es Buggy. Resultar en duplicados

 

This code is buggy.Would result in duplicates

 
 

Relacionados problema

4  Implementación de MongoDB similar al usuario  ( User like mongodb implementation ) 
Esta es mi primera implementación de Mongodb, mucho más por venir. Esto arroja luz sobre algunas cosas como cómo he estructurado mi colección. Espero obtener ...

2  Cree una solicitud de transmisión para el historial de transacciones por ID de cliente en Braintree Vault  ( Create a stream request for transaction history by client id on braintree vault ) 
He estado tratando de crear una solicitud de historial de transacciones de Braintree utilizando un ID de cliente en Braintree Vault, y se tardó mucho en descu...

4  Optimización de las uniones de ASYNC para MongoDB (mangosta) usando async.js  ( Optimizing async joins for mongodb mongoose using async js ) 
Estoy construyendo una aplicación web de Media Viewer para un quiosco en nodo que usa datos en Mongo. Para representar al espectador, reúne todos los objetos ...

1  Administración de módulos en la aplicación de la guía telefónica  ( Managing modules in phone book app ) 
Esta es una aplicación de prueba construida con NODEJS, Express y Mongodb. Este código es el archivo JavaScript principal y completo. Me gustaría sugerencias ...

2  Usando tipos para diseñar dominio  ( Using types to designing domain ) 
Estoy tratando de modelar un dominio de métricas para su uso en una solicitud de BI. Hace poco leí el Diseño con tipos serie, y sintió que podría ser útil ,...

7  Tirando de la máquina Docker IP  ( Pulling docker machine ip ) 
Estoy trabajando con MongoDB a través de Docker, y tengo un mando de Bash terrible para tirar de la máquina Docker Machine IP para que pueda conectarla a nive...

2  Uso síncrono del controlador Mongo-Scala  ( Synchronous use of mongo scala driver ) 
The Driver Mongo-Scala (v2.6) actualmente solo admite operaciones asíncronas, aunque mis casos de uso a menudo parecen prestarse bien a las lecturas síncron...

3  Bash Script para implementar un clúster de MongoDB en la máquina local  ( Bash script to deploy a mongodb cluster on local machine ) 
Recientemente escribí un pequeño script para implementar una mongodb cluster en un Máquina única. El clúster está compuesto por: 3 Configurations Serve...

6  Libro de direcciones de teléfono simple  ( Simple telephone address book ) 
Soy nuevo en la programación de Java, y para ayudarme a aprender, creé una simple libreta de direcciones telefónicas. El código se ejecuta como se esperaba, p...

4  Conexión mongodb de un solo nodo JS  ( Node js single mongodb connection ) 
Quiero que toda mi aplicación de nodo. Utilice una sola conexión MongoDB, al menos eso es lo que creo que es mejor. Escribí este pequeño script y quiero un co...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos