我目前正在嘗試使用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