将数据插入MongoDB - 没有错误,没有插入

bip*_*obe 16 mongodb node.js

我目前正在尝试使用mongoDB和nodeJS创建一个注册表单 - 我创建了新的数据库和集合 - 我想在我的数据库中存储:用户名,密码,电子邮件和insert_time.

我已经为用户名/电子邮件添加了唯一索引并检查它是否有效 - 我无法使用mongo的控制台或rockmongo(php mongodb manager)添加重复的条目 - 所以它工作正常.

但是 - 当正在执行注册新帐户的代码片段并使用已存在于数据库中的数据进行插入时 - 它返回一个对象,该对象包含应该添加新数据的所有数据,唯一身份.关键是 - 它应该返回一个错误,表示条目不能重复并且插入失败 - 而是返回数据并给它一个新的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);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

对于这两种情况 - 插入新数据并插入不以任何方式修改数据库的重复数据 - ERROR为null,SAVED只是应该插入的数据的副本.有没有办法检查是否插入 - 或者我是否必须在插入之前/之后检查数据是否已经存在于数据库中?

dic*_*sio 13

Mongo以这种方式工作.您应该在发出save命令时使用safe选项告诉您想要返回错误(默认情况下,它使用"fire and forget"方法).

https://docs.mongodb.com/manual/reference/command/getLastError/

  • 将"safe:true"添加到"save"函数解决了我的问题.谢谢. (3认同)