我尝试使用标准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 selectDB(tableName, key, value, callback) {
var req = {};
req[key] = value;
db.collection(tableName).find(req, callback);
}
写函数
function insertDB(tableName, obj) {
db.collection(tableName).insertOne(obj, function (err, res) {
if (err !== null) {
throw err;
} else {
console.log(res);
}
});
}
使用此功能将数据插入数据库之后,可以使用Mongo shell找到它。我在shell中成功使用了bash find()
函数,但没有在js代码中使用。
更新
现在我将回调传递给此处提到的toArray()
函数,但我仍然没有得到结果:回调没有被执行。
我的selectDB()
功能现在看起来像这样。
var req = {};
req[key] = value;
db.collection(tableName).find(req).toArray(callback);
更新
这是一些数据查询示例: 贝壳 输入:
> db.users.find({"email":"aa@aa"})
输出:
{ "_id" : ObjectId("572ba1a599f59780f549e5e3"), "email" : "aa@aa", "password" : "2GU9I8syq2Oyf6rSqJNDVyFPOTRwPg3nyQjSwPXppvM=" }
JS
查询(req
变量的键值对):
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();
}
});
最后执行回调。
始终执行error()
函数,因为回调中的游标始终未定义。
如果有人知道我做错了什么以及如何解决,请回答。