2017-04-20 205 views
0

以下代码工作正常。但是,当我从我的cmd(节点服务器)再次运行它时,我得到了菜名的重复键信息。我有两个文件。在dishes.js中,我定义了我的模式,并将其提供给我的第二个文件server.js。E11000重复密钥错误集合:

// grab the things we need 
    var mongoose = require('mongoose'); 
    var Schema = mongoose.Schema; 

    var commentSchema = new Schema({ 
     rating: { 
      type: Number, 
      min: 1, 
      max: 5, 
      required: true 
     }, 
     comment: { 
      type: String, 
      required: true 
     }, 
     author: { 
      type: String, 
      required: true 
     } 
    }, { 
     timestamps: true 
    }); 
    // create a schema 
    var dishSchema = new Schema({ 
     name: { 
      type: String, 
      required: true, 
      unique: true 
     }, 
     description: { 
      type: String, 
      required: true 
     }, 
     comments:[commentSchema] 
    }, 
    { 
     timestamps: true 
    }); 

    // the schema is useless so far 
    // we need to create a model using it 
    var Dishes = mongoose.model('Dish', dishSchema); 

    // make this available to our Node applications 
    module.exports = Dishes; 

和我server.js文件。

  var mongoose = require('mongoose'), 
      assert = require('assert'); 

     var Dishes = require('./models/dishes-3'); 

     // Connection URL 
     var url = 'mongodb://localhost:27017/conFusion';mongoose.connect(url); 
     var db = mongoose.connection; 
     db.on('error', console.error.bind(console, 'connection error:')); 
     db.once('open', function() { 
      // we're connected! 
      console.log("Connected correctly to server"); 

      // create a new dish 
      Dishes.create({ 
       name: 'Uthapizza', 
       description: 'Test', 
       comments: [ 
        { 
         rating: 3, 
         comment: 'This is insane', 
         author: 'Matt Daemon' 
        } 
       ] 
      }, function (err, dish) { 
       if (err) throw err; 
       console.log('Dish created!'); 
       console.log(dish); 

       var id = dish._id; 

       // get all the dishes 
       setTimeout(function() { 
        Dishes.findByIdAndUpdate(id, { 
          $set: { 
           description: 'Updated Test' 
          } 
         }, { 
          new: true 
         }) 
         .exec(function (err, dish) { 
          if (err) throw err; 
          console.log('Updated Dish!'); 
          console.log(dish); 

          dish.comments.push({ 
           rating: 5, 
           comment: 'I\'m getting a sinking feeling!', 
           author: 'Leonardo di Carpaccio' 
          }); 

          dish.save(function (err, dish) { 
           console.log('Updated Comments!'); 
           console.log(dish); 

           db.collection('dishes').drop(function() { 
            db.close(); 
           }); 
          }); 
         }); 
       }, 3000); 
      }); 
     }); 

如果你支付我已删除了独特的server.js文件中的密切关注:从dishes.js文件真实属性,但我仍然有同样的问题。

name: { 
     type: String, 
     required: true, 
     unique: true 
    }, 
+0

尝试删除收集并重新启动服务器 –

+0

我正在删除它。 db.collection('dishes')。drop(function(){ db.close(); }); – Theo

+0

但没有任何反应。 – Theo

回答

0

当你的模式如下

name: { 
     type: String, 
     required: true, 
     unique: true 
    } 

唯一给出的工作

当你的模式如下

name: { 
     type: String, 
     required: true 
    } 

独特的工作不

后给出呃改变你的模式定义,删除所有的集合并尝试插入。