如何迭代node.js中的mongodb数据库发送给Algolia?

在Algolia的文档中,他们指定使用MySQL作为索引而不是MongoDB的node.js部分,关于这个问题我还有另外一个问题,但是这是一个更普遍的问题, 请点击这里

有些人问我使用mongo连接器,但试了一下,我得到了一些未知的错误,这让我到了一个平方米

我真正的问题是,我如何迭代mongodb到algolia的集合列表?

这是Node.js中的Algolia版本的MySQL

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,所以我没有其他图书馆的经验。 请帮助我,这样我可以search一些界面已经:(。

您可以使用以下代码遍历整个MongoDB mydb.myCollection集合+创build将发送到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); } }); });