Tag: node mongodb native

Node.JS + mongo:.find()。each()在第一批后停止

这让我难住了。 我有一个独立的(命令行执行的)节点脚本,其目的是遍历大型集合中的所有文档(数十万个),并为每个文档执行一些计算,运行一些额外的JS代码,然后用一些新的值更新文档。 根据cursor.each()的文档 ,一旦我从collection.find()获得游标, .each(cb)方法应该对整个集合中的每个项目执行cb(item) 。 示例代码: myDb.collection('bigcollection').find().each(function(err, doc) { if (err) { console.log("Error: " + err); } else { if (doc != null) { process.stdout.write("."); } else { process.stdout.write("X"); } } }); 我希望这样做是打印出数十万. 然后在最后打印一个X ,因为cursor.each()应该是“迭代该游标的所有文档”,并且根据示例代码“如果该项为null,则游标被耗尽/为空并closures“。 但是, 实际上做的是精确地打印出101 . 没有一个X在最后。 如果我调整批量大小( .find().batchSize(10).each(… ),它会在.find().batchSize(10).each(…之前精确地处理这些文档。 那么,为什么只处理第一批? 我不知何故误读.each()的文档? 这是否与这是一个命令行脚本的事实有关,并且在第二批结果返回之前,整个脚本以某种方式退出,或者什么? 如果是这样,我怎么确定它实际上处理所有的结果? 作为一个侧面节点,我尝试过使用.stream()和.forEach(),并且在这两种情况下,它都会在第一批之后进行沟渠。 更新:嗯,这很有趣。 只是尝试连接到我的生产服务器,而不是我的本地主机上的mongo实例,瞧,它运行通过整个集合像它应该。 服务器运行mongodb 3.0.6,我的本地实例是3.2.3。 我的版本的节点mongodb驱动程序是2.0.43。

如何在nodejs中同步连接到mongodb

我想利用承诺function,我可以同步连接到MongoDB,我可以通过传递到不同的模块重用连接。 这是我想出的东西 class MongoDB { constructor(db,collection) { this.collection = db.collection(collection); } find(query, projection) { if(projection) return this.collection.find(query, projection); else return this.collection.find(query); } } class Crew extends MongoDB { constructor(db) { super(db,'crews'); } validate() { } } 我想在我的初始代码中设置一个连接,就像下面的代码一样,然后重复使用不同类的连接,就像mongoose或monk一样,只使用node-mongodb-native包。 MongoClient.connect(url) .then( (err,dbase) => { global.DB = dbase; }); var Crew = new CrewModel(global.DB); Crew.find({}) .then(function(resp) { console.log(resp); […]

MongoDB连接不断增加

我一直在打我的连接限制,但httpstream量保持一致。 我使用MMS来分析我的mongod进程,并看到连接数不断上升: 我为Node.js(Express)使用mongoskin包装器。 我有一个自定义路由中间件,在执行其他路由之前连接到mongo数据库: var _connect = function(req, res, next) { res.db = mongoskin.db(_us.sprintf( '%s:%s@localhost:27017/%s?auto_reconnect', app.set('mongoDbUser'), app.set('mongoDbPw'), app.set('mongoDb') )); next(); }; 难道我做错了什么? 我应该如何打开和closures连接?

如何在node.js中重用mongodb连接

我正在使用mongodb的node-mongodb本地驱动程序来编写一个网站。 我有一个关于如何打开一次mongodb连接的问题,然后将它用在user.js中的集合名称用户和comment.js集合名称文章中 我想在db.js打开数据库连接,然后插入/保存用户和post集合的数据 目前的代码,我的db.js var Db = require('mongodb').Db, Connection = require('mongodb').Connection, Server = require('mongodb').Server; module.exports = new Db( 'blog', new Server('localhost', Connection.DEFAULT_PORT, {auto_reconnect: true}) ); 我在user.js使用了user.js ,如下所示 var mongodb = require('./db'); function User(user){ this.name = user.name; this.password = user.password; this.email = user.email; }; module.exports = User; User.prototype.save = function(callback) {//save user information //document to save […]

MongoError:驱动程序与此服务器版本不兼容

我刚刚安装了Mongo,Node等,当我尝试通过我的nodejs服务器更新数据库时,出现此错误: MongoError: driver is incompatible with this server version 这里是我有的版本: 节点 v0.12.2(最新版本是v0.12.3) Express v4.12.4(最新版本是v4.12.4) Mongodb v3.0.3(最新版本是v3.0.3) Mongodb Node.js驱动程序 v2.0.33(最新版本是v2.0.33) Mongoskin v1.3.23(最新版本是v1.3.23) 我有最新版本的一切,我已经search了节点的mongodb驱动程序的git来找出哪个版本的mongodb支持,但我找不到什么:( 我还读了其他SO问题,它说要更新您的mongodb,但我的是最新的版本! 任何帮助?

node-mongodb-native MongoClient意外closures连接

我一直在寻找很多mongodb中意外closures的连接,但是只能从想要closures连接的人那里find问题。 我正在使用node-mongodb-native连接到一个数据库,但我一直在看似随机的“错误:连接closures”消息。 如果我手动重试请求(浏览器刷新)请求的作品。 任何想法是什么造成这个? 有一些简单的选项,将有助于? 我得到我的数据库句柄使用: MongoClient.connect(connection_string, { auto_reconnect: true }, function (err, db) { //server code/routes in here } 我正在通过https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/connection/server.js查看,但是我意识到我对连接池的pipe理方式的理解有限,向上。 我的印象是他们在我的服务器的一生中保持开放。 有人可以帮忙吗? 编辑:在阅读mjhm的评论之后,我开始更深入地研究TCP保持活力。 偶然发现了一些网站,说这可能是Azure的做法(现在这个问题被错误分类了!)。 显然,Azure负载平衡器在1分钟的活动之后终止连接。 我正在使用Azure网站,因此可能适用,也可能不适用,但我认为这种洞察力足以启动一个新的调查线。 更多细节在这里http://blogs.msdn.com/b/avkashchauhan/archive/2011/11/12/windows-azure-load-balancer-timeout-details.aspx

node-mongodb-native – 在每次调用期间,游标将返回null作为最后一个值

所以。 我有一个非常基本的脚本,连接到一个数据库,并find一个有很多文件的集合,并将其限制为3个项目。 除了在结果结尾处,一切都平稳运行,并且在成功完成后,脚本不会终止,而是悄悄地closures连接。 在这里我声明我的params并创build我的数据库对象: var SERVER = 'localhost', PORT = 27017, DATABASE = 'test', COLLECTION = 'coll', mongo = require('mongodb'), db = new mongo.Db(DATABASE, new mongo.Server(SERVER, PORT, {auto_reconnect: true}), {}); 在这里,我连接到数据库,并继续用find光标和each函数来查询它: db.open(function(err, db) { if(err) throw err; var collection = new mongo.Collection(db, COLLECTION), cursor = collection.find({}, {}).limit(3); cursor.each(function(err, doc) { if(err) throw err; console.log(doc); }); […]

使用es7 async / await检查文档是否存在于mongodb中

我试图检查用户提供的email提供存在集合的users ,但我的函数不断返回未定义的每个调用。 我使用es6和async/await ,以摆脱大量的callback。 这是我的function(它是在一个类中): async userExistsInDB(email) { let userExists; await MongoClient.connect('mongodb://127.0.0.1:27017/notificator', (err, db) => { if (err) throw err; let collection = db.collection('users'); userExists = collection.find({email: email}).count() > 0; console.log(userExists); db.close(); }); console.log(userExists); return userExists; } 因此, .connect调用中的第一个console.log始终返回false因为.find的返回值不是数组,它是一个巨大的对象,如下所示: { connection: null, server: null, disconnectHandler: { s: { storedOps: [], storeOptions: [Object], topology: [Object] }, […]

mongodb本地驱动程序获取没有数据库名称的集合名称

我怎样才能得到没有数据库名称的mongodb本地驱动程序为nodeJS集合名称? db.collectionNames(function(err, collections) { if (err) { log.error(err); } else { log.info(collections); } }); 此代码返回如下所示: databaseName.collection1,databaseName.collection2,databaseName.collection3 但我想得到的名字: collection1, collection2, collection3

为什么在mongodb-native驱动中有单独的mongo.Server和mongo.Db?

我只是学习nodejs的mongodb本地驱动程序。 我这样连接。 var mongo=require("mongodb") var serv=mongo.Server("localhost", 27017) var dbase=mongo.Db("MyDatabase", serv) 那是有效的。 但是,如果我尝试使用相同的服务器创build一个新的数据库连接,我得到一个错误。 var dbase2=mongo.Db("MyDatabase2", serv) “错误:服务器或ReplSet实例不能在多个Db实例之间共享” 但是,如果首先build立一个新的服务器连接,它就会起作用 var serv2=mongo.Server("localhost", 27017) var dbase2=mongo.Db("MyDatabase2", serv2) 所以我的问题是为什么有2个连接function,一个服务器和一个Db,当他们似乎必须总是一起使用? 为什么不这样呢? var dbase=mongo.Db("localhost", 27017, "MyDatabase") 我想要做我自己的function,但我不知道是否有其他原因,他们是分开的。 谢谢。