我如何通过纯NodeJS从MongoDB读取数据?
我试图使用标准的MongoClient和纯粹的NodeJS保存和读取MongoDB的一些数据。 问题是我可以写数据但不能读取它。 这是我的代码。
var MongoClient = require('mongodb').MongoClient; var url = "mongodb://localhost:27017/test"; var db; MongoClient.connect(url, function (err, database) { if (err !== null) { throw err; } db = database; });
阅读function
function selectDB(tableName, key, value, callback) { var req = {}; req[key] = value; db.collection(tableName).find(req, callback); }
写function
function insertDB(tableName, obj) { db.collection(tableName).insertOne(obj, function (err, res) { if (err !== null) { throw err; } else { console.log(res); } }); }
在使用这个数据插入数据库之后,可以使用Mongo shell来find它。 我成功地在shell中使用bash find()
函数,而不是在js代码中。
更新
现在我将callback传递给这里提到的toArray()
函数,但是我仍然没有得到结果:callback没有执行。 我的selectDB()
函数现在看起来像这样。
var req = {}; req[key] = value; db.collection(tableName).find(req).toArray(callback);
更新
这里有一些数据查询的例子: Shell Input:
> db.users.find({"email":"aa@aa"})
输出:
{ "_id" : ObjectId("572ba1a599f59780f549e5e3"), "email" : "aa@aa", "password" : "2GU9I8syq2Oyf6rSqJNDVyFPOTRwPg3nyQjSwPXppvM=" }
JS
查询( req
variables的键值对):
key = "email" value = "aa@aa"
之后,我得到了我之前描述的结果。
更新
毕竟这里是我的结果处理代码( callback
):
//select() here is an alias for selectDB() function declared earlyer db.select("users", "email", user.email, function (err, cursor) { if (cursor === undefined || cursor == null || err !== null) { error(); } else if (cursor.password === user.password) { success(); } else { wrong(); } });
最后callback被执行。 error()
函数始终执行,因为callback中的游标始终未定义。
如果有人知道我做错了什么,如何解决它,请回答。
您使用的是什么版本的node-mongodb-native(驱动程序)? 在最新的一个发现不接受callback作为第二个参数。