我目前正在尝试使用 mongoDB 和 nodeJS 创建一个注册表单 - 我已经创建了新的数据库和集合 - 我想在我的数据库中存储:用户名、密码、电子邮件和 insert_time。
我已经为用户名/电子邮件添加了唯一索引并检查了它是否有效 - 我无法使用 mongo 的控制台或 rockmongo(php mongodb 管理器)添加重复的条目 - 所以它工作正常。
但是 - 当应该注册一个新帐户的代码正在执行并使用数据库中已经存在的数据进行插入时 - 它返回一个对象,其中包含应该添加的所有数据一个新的、唯一的 ID。关键是 - 它应该返回一个错误,表明条目不能被复制并且插入失败 - 相反,它会返回数据并给它一个新的 id。已经存在于数据库中的数据保持不变 - 即使 ID 保持不变 - 它不会被脚本插入返回的新数据重写。
所以,问题是……我做错了什么?或者也许一切都很好,数据库的插入即使失败也应该返回数据?...
我什至尝试在执行索引之前定义索引。 我尝试使用 mongoDB 的默认函数和 mongoJS 插入数据函数 - 两种情况下的结果相同。
我正在尝试执行的代码(对于 mongoJS ):
var dbconn = require("mongojs").connect('127.0.0.1:27017/db', ['users']);
var register = function(everyone, params, callback)
{
// TODO: validation
dbconn.users.ensureIndex({username:1},{unique:true});
dbconn.users.ensureIndex({email:1},{unique:true});
dbconn.users.save(
{
username: params.username,
password: params.password,
email: params.email,
insert_time: Date.now()
},
function(error, saved)
{
if(error || !saved)
{
callback(false);
}
else
{
console.log(error);
console.log(saved);
callback(true);
}
});
}
对于这两种情况 - 插入新数据和插入不会以任何方式修改数据库的重复数据 - ERROR 为空,而 SAVED 只是应该插入的数据的副本。有什么方法可以检查是否进行了插入 - 或者我是否必须在插入之前/之后手动检查数据是否已经存在于数据库中?
最佳答案
Mongo 就是这样工作的。您应该在发出 save 命令时使用安全选项告诉您想要恢复错误(默认情况下,它使用“即发即弃”方法)。
https://docs.mongodb.com/manual/reference/command/getLastError/
关于node.js - 将数据插入 MongoDB - 没有错误,没有插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9457368/