插入数据到MongoDB – 没有错误,没有插入

我目前正在试图使用mongoDB和nodeJSregistry单 – 我已经创build了新的数据库和集合 – 我想在我的数据库中存储:用户名,密码,电子邮件和insert_time。

我已经添加了唯一的索引到用户名/电子邮件,并检查它是否工作 – 我不能添加使用mongo的控制台或rockmongo(php mongodb经理)重复的条目 – 所以它工作正常。

然而,当应该注册一个新账户的代码片段正在被执行并且使用已经在数据库中的数据进行插入时,它将返回一个对象,该对象包含所有应该添加新数据的数据,唯一身份。 重点是 – 它应该返回一个错误,说明条目不能重复,插入失败 – 而是返回数据,并给它一个新的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); } }); } 

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

Mongo是这样工作的。 你应该告诉你想要得到错误,当你发出保存命令时,使用安全选项(默认情况下它使用“fire and forget”方法)。

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

这看起来与MongoDB唯一索引不起作用基本相同 – 但是使用JavaScript API而不是Java。 也就是说,在没有指定“安全”标志或明确检查最后一个错误值是不安全的情况下保存—客户端生成的ID和分派的命令,但它可能仍然失败(例如,由于唯一的索引冲突)。 您需要明确获取最后的错误状态。

http://www.mongodb.org/display/DOCS/dbshel​​l+Reference#dbshel​​lReference-ErrorCheckingbuild议使用shell命令db.getLastError() ,我假设节点API是相同的,他们可以这样做。