【问题标题】:mongoose unique: true not work [duplicate]猫鼬独特:真的不起作用[重复]
【发布时间】:2015-02-05 22:07:41
【问题描述】:

为什么 mongoose unique 在这个脚本中根本不起作用

  var child_process = require('child_process');
  // Load required packages
  child_process.exec("mongo test --eval 'db.users.drop();'", function(err){
  var mongoose = require('mongoose');

  console.log(mongoose.version);
  mongoose.connect('mongodb://localhost:27017/test');
  // Define our user schema

  var json = {};
  json.phone = { type: String, required: true, unique: true};
  var UserSchema = new mongoose.Schema(json);
  var Model = mongoose.model('user', UserSchema);

  var jp = new Model({ phone: "123456"});
  mongoose.connection.on('open', function(){
    console.log(jp);
    jp.save(function(err){
      console.log(err);
      var jp2 = new Model({ phone: "123456"});
      console.log(jp2);
      jp2.save(function(err){
        console.log(err);
        process.exit();
      });
    })
  });
});

我很困惑,结果是这样的

3.8.20
{ phone: '123456', _id: 54856cceb5b40f7a88fcc2af }
null
{ phone: '123456', _id: 54856cceb5b40f7a88fcc2b0 }
null

感谢您的帮助。

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    发生这种情况是因为您在 mongoose 完成创建索引之前保存了重复的文档。在您的应用启动后,Mongoose 会随时随地创建索引。

    因此,为确保仅在创建索引后保存您的文档,您必须监听模型的 index 事件。例如:

    Model.on('index', function (error) {
      console.log(jp);
      jp.save(function(err){
        console.log(err);
        var jp2 = new Model({ phone: "123456"});
        console.log(jp2);
        jp2.save(function(err){
          console.log(err);
          process.exit();
        });
      })
    });
    

    现在,当您尝试保存第二个文档(重复的文档)时,您的 MongoDB 将引发错误,因为您的 save 调用将在创建索引后运行。

    【讨论】:

    • 谢谢,这就是我想要的。
    猜你喜欢
    • 1970-01-01
    • 2015-09-07
    • 2018-04-22
    • 2022-07-22
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多