我目前正在尝试使用mongoDB和nodeJS做一个注册表单 - 我创建了新的数据库和集合 - 我想存储:用户名,密码,电子邮件和insert_time在我的数据库。插入数据到MongoDB - 没有错误,没有插入
我已经添加了唯一索引到用户名/电子邮件,并检查它是否工作 - 我不能使用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);
}
});
}
对于两种情况 - 插入新的数据并插入不以任何方式修改数据库的重复数据 - 错误为空并保存只是应该插入的数据的副本。有没有办法检查插入是否被做 - 或者我必须在插入之前/之后检查数据是否已经存在于数据库中或者没有手动检查?
将“安全:真”添加到“保存”功能解决了我的问题。谢谢。 – biphobe 2012-02-26 23:36:12