Как перебрать базу данных mongodb в node.js для отправки в Алголию?

В документации Algolia для части node.js они указали использовать MySQL для индексации, но не MongoDB, у меня есть еще один вопрос по этой проблеме, но это более общий вопрос, проверьте здесь

Некоторые люди просят меня использовать mongo-connector, но я попробовал и получил неизвестную ошибку. , что заставило меня задуматься

Мой реальный вопрос: как мне перенести список коллекций в mongodb в algolia?

Это версия MySQL для Algolia в Node.js.

var _ = require('lodash');
var async = require('async');
var mysql = require('mysql');

var algoliasearch = require('algoliasearch');
var client = algoliasearch("RQGLD4LOQI", "••••••••••••••••••••••••••••••••");
var index = client.initIndex('YourIndexName');

var connection = mysql.createConnection({
  host: 'localhost',
  user: 'mysql_user',
  password: 'mysql_password',
  database: 'YourDatabaseName'
});

connection.query('SELECT * FROM TABLE_TO_IMPORT', function(err, results, fields) {
  if (err) {
    throw err;
  }

  // let's use table IDS as Algolia objectIDs
  results = results.map(function(result) {
    result.objectID = result.id;
    return result;
  });

  // split our results into chunks of 5,000 objects, to get a good indexing/insert performance
  var chunkedResults = _.chunk(results, 5000);

  // for each chunk of 5,000 objects, save to algolia, in parallel. Call end() when finished
  // or if any save produces an error
  // https://github.com/caolan/async#eacharr-iterator-callback
  async.each(chunkedResults, index.saveObjects.bind(index), end);
});

function end(err) {
  if (err) {
    throw err;
  }

  console.log('MySQL<>Algolia import done')
};

Если быть точным, я использую mongoose в качестве ORM, поэтому у меня нет опыта работы с другими библиотеками. Пожалуйста, помогите мне в этом, чтобы я мог уже искать интерфейс :(.


person Jack Moscovi    schedule 17.10.2015    source источник


Ответы (1)


Вы можете использовать следующий код для перебора всей коллекции MongoDB mydb.myCollection + создания пакетов, которые будут отправлены в индекс Algolia:

var Db = require('mongodb').Db,
    Server = require('mongodb').Server,
    algoliasearch = require('algoliasearch');

// init Algolia index
var client = algoliasearch("*********", "••••••••••••••••••••••••••••••••");
var index = client.initIndex('YourIndexName');

// init connection to MongoDB
var db = new Db('mydb', new Server('localhost', 27017));
db.open(function(err, db) {
  // get the collection
  db.collection('myCollection', function(err, collection) {
    // iterate over the whole collection using a cursor
    var batch = [];
    collection.find().forEach(function(doc) {
      batch.push(doc);
      if (batch.length > 10000) {
        // send documents by batch of 10000 to Algolia
        index.addObjects(batch);
        batch = [];
      }
    });
    // last batch
    if (batch.length > 0) {
      index.addObjects(batch);
    }
  });
});
person redox    schedule 17.10.2015