В настоящее время я пытаюсь создать регистрационную форму с использованием mongoDB и nodeJS - я создал новую базу данных и коллекцию - я хочу хранить: имя пользователя, пароль, электронную почту и insert_time в моей базе данных.
Я добавил уникальные индексы к имени пользователя/электронной почте и проверял, работает ли он - и я не могу добавить дублируемую запись с помощью консоли mongo или rockmongo (php mongodb manager), поэтому он отлично работает.
Однако - когда кусок кода, который должен регистрировать новую учетную запись, выполняется и вставляет данные с данными, которые уже находятся в базе данных, - возвращает объект, содержащий все данные, которые должны были быть добавлены с помощью новый уникальный идентификатор. Дело в том, что он должен возвращать ошибку, которая говорит, что записи не могут быть дублированы, а вставка не удалась - вместо этого она возвращает данные назад и дает новый идентификатор. Данные, которые уже находятся в базе данных, остаются нетронутыми - даже идентификатор остается неизменным - он не переписывается с новым, возвращаемым вставкой script.
Итак, вопрос в том, что я делаю неправильно? Или, может быть, все в порядке, и вставка базы данных должна возвращать данные, даже если это не удалось?...
Я даже попытался определить индексы перед выполнением индексов. Я попытался вставить данные с использованием функций по умолчанию 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 имеет значение null и SAVED - это всего лишь копия данных, которые должны быть вставлены. Есть ли способ проверить, была ли вставка сделана или нет, или мне нужно проверить, существуют ли данные в базе данных или нет вручную до/после создания вставки?