当前位置: 首页 > 面试题库 >

mongoose独特:true无效

阎俊英
2023-03-14
问题内容

为什么在此脚本中猫鼬唯一不起作用

  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

谢谢您的帮助。


问题答案:

发生这种情况是因为您要在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调用将在创建索引后立即运行。



 类似资料:
  • 问题内容: 我正在尝试创建一个具有唯一用户名的用户模型。这是它的代码: 我还测试了唯一性是否有效: 问题是,事实并非如此。每次运行代码时,都会创建一个新对象。我知道,可能还有其他方法可以确保唯一性,但是我想以此方式进行。处理该方法的结果后,是否应该不打电话?我打错电话了吗? 问题答案: 要使用并行中间件(带有和参数),您需要作为第二个参数传递。 除此之外,还有两种可能性: 您的呼叫应引用而不是。如

  • 问题内容: 这个问题实际上并不是寻找解决方案的问题,而仅仅是出于好奇。PHP uniqid函数具有一个更熵的标志,以使输出“更唯一”。这让我想知道,当more_entropy为true时(而不是true时),此函数多次产生相同结果的可能性有多大。换句话说,启用more_entropy时与禁用时相比,uniqid的唯一性如何?始终启用more_entropy是否有任何弊端? 问题答案: 2014年3

  • 问题内容: 我创建了一个Sudoku Backtracking解算器,并且效果很好,但是现在我想给出一个错误,如果该数独无法解决,因为它是无效的,例如如果给出了这个数独: http://img5.imageshack.us/img5/2241/sudokugq.jpg 如果无法解决,我该怎么办才能使我的解决方法出错?我总是以零结束或陷入循环。 问题答案: 当然,当您触及代码时,您刚刚尝试了平方中的

  • 问题内容: 给定下面的数组,我想知道是否有一种简单的方法可以将此数组转换为仅具有唯一值的数组? 给出: 将其变成这样的结果数组,保留原始顺序: 问题答案: 在Java 8中,用于获取数组的唯一元素 最简单的方法是从数组创建集合。 然后您可以使用以下方法检索数组: 如果要维护订单,请使用 LinkedHashSet; 如果要对订单进行排序,请使用 TreeSet 。

  • 问题内容: 我想将Mongoose模型分离到一个单独的文件中。我试图这样做: 然后,我尝试使用如下模型: 在单独的模块中引用模型是否合理? 问题答案: 基本方法看起来很合理。 作为一种选择,您可以考虑集成模型和控制器功能的“提供商”模块。这样,您可以让app.js实例化提供程序,然后可以执行所有控制器功能。app.js只需指定要实现的具有相应控制器功能的路由即可。 为了进一步整理,您还可以考虑使用

  • 问题内容: 我有以下代码: 但我不明白为什么会返回3而不是2。 问题答案: 您还需要重写class中的方法。例如: 当两个对象相等时,它们的方法必须返回相同的值。 接口的API文档没有提及这一点,但是众所周知,如果您覆盖,则还应该覆盖。API文档提到了这一点: 请注意,通常有必要在重写此方法时重写该方法,以维护该方法的常规协定,该协定规定相等的对象必须具有相等的哈希码。 显然,确实使用了对象的哈希