从MongoDB驱动调用getUsers()函数

我目前正在构build一个api应用程序,根据用户input,使用Sailsjs(如用户)检查状态并获取各种types的dbs(即Mongo,MySQL)的信息。 这是我正在处理的代码片段。 本地主机只是我连接的testing数据库,但将来会由用户提供。

var mp = require('mongodb-promise'); var MongoClient = require('mongodb'); mp.MongoClient.connect("mongodb://@localhost:27017/test") .then(function(db){ db.getUsers().then(function(users){ res.ok(users); }) }) .fail(function(err) { console.log(err); }) 

我正在尝试使用承诺的asynchronous问题。 我遇到的问题是它不起作用。 它告诉我,Object [对象对象]没有方法'getUsers'。 我已经search,似乎无法find有效的解决scheme。

如果我把这个函数改成下面的话,我得到一些数据。

  mp.MongoClient.connect("mongodb://@localhost:27017/IMS") .then(function(db){ db.stats().then(function(stats){ return res.ok(stats); }) }) .fail(function(err) { console.log(err); dbObject.vipUp = false; }) 

我不确定问题是什么或如何解决。

你在这里做的是使用节点本地驱动程序方法来连接和检查数据库。 在这个API中实际上没有像.getUsers()这样的方法,或者实际上在任何其他的API中。

.getUsers()函数只是一个基本上像这样实现的“shell帮助程序”:

 function (args) { var cmdObj = {usersInfo: 1}; Object.extend(cmdObj, args); var res = this.runCommand(cmdObj); if (!res.ok) { var authSchemaIncompatibleCode = 69; if (res.code == authSchemaIncompatibleCode || (res.code == null && res.errmsg == "no such cmd: usersInfo")) { // Working with 2.4 schema user data return this.system.users.find({}).toArray(); } throw Error(res.errmsg); } return res.users; } 

所以你应该能够在这里看到的是,这通常包装一个“命令”forms,否则就会退缩以兼容MongoDB 2.4来查询当前数据库上的system.users集合。

因此,不是调用一个不存在的方法,而是需要使用.command()方法:

 mp.MongoClient.connect("mongodb://@localhost:27017/test") .then(function(db){ db.command({ "usersInfo": 1}).then(function(users){ res.ok(users); }) }) .fail(function(err) { console.log(err); }) 

或者在连接到MongoDB 2.4实例的情况下,从.collection()获取:

 mp.MongoClient.connect("mongodb://@localhost:27017/test") .then(function(db){ db.collection('system.users').find().toArray().then(function(users){ res.ok(users); }) }) .fail(function(err) { console.log(err); }) 

无论如何,你真的应该在你的应用程序的其他地方build立数据库连接(或者重新使用来自另一个商店的底层驱动程序连接),然后调用已经build立的连接方法。 这总是比您要检索的信息的请求创build连接更可取。

此外,最新版本的节点本机驱动程序支持承诺立即开箱即用。 因此,根据您打算如何使用它,可能不需要configuration任何其他内容。