首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mongoose unique: true not work

mongoose unique: true not work
EN

Stack Overflow用户
提问于 2014-12-08 17:20:59
回答 1查看 10.2K关注 0票数 5

为什么mongoose唯一在此脚本中根本不起作用

代码语言:javascript
复制
  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();
      });
    })
  });
});

我很困惑,结果是这样的

代码语言:javascript
复制
3.8.20
{ phone: '123456', _id: 54856cceb5b40f7a88fcc2af }
null
{ phone: '123456', _id: 54856cceb5b40f7a88fcc2b0 }
null

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-09 21:45:40

这是因为您在mongoose完成索引创建之前保存了重复的文档。在你的应用程序启动后,Mongoose会在旅途中创建索引。

因此,为了确保只有在创建索引之后才保存文档,您必须侦听模型的index事件。例如:

代码语言:javascript
复制
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调用将在创建索引之后运行。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27354834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档