没有_id的Mongoose数据保存

时间:2014-08-17 00:34:09

标签: node.js mongoose

我在node.js应用程序中使用mongoose。我不想要_id字段记录。 我使用此代码保存我的记录没有_id字段。但它给出了错误

  保存前

文档必须有_id

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var PlayerSchema = new Schema({
    player_id :  { type: Number },
    player_name : { type: String },
    player_age  : { type: Number },
    player_country : { type: String }
}
, { _id: false }
);

var Player =  mongoose.model('Player', PlayerSchema );

        var athlete = new Player();
        athlete.player_id = 1;
        athlete.player_name = "Vicks";
        athlete.player_age  = 20;
        athlete.player_country = "UK";

        athlete.save(function(err) {
            if (err){
                console.log("Error saving in PlayerSchema"+ err);
            }
        });

我使用的是mongoose版本3.8.14

2 个答案:

答案 0 :(得分:2)

不幸的是,您不能跳过拥有该文档的主键,但您可以覆盖主键内容,您可以为每个文档定义自己的主键。

尝试以下架构。

var PlayerSchema = new mongoose.Schema({
_id :  { type: Number },
player_name : { type: String },
player_age  : { type: Number },
player_country : { type: String },

} );

我已将player_id替换为_id。现在您可以控制文档的主键,系统不会为您生成密钥。

有一些插件也可以为您的主键执行autoincremethttps://github.com/chevex-archived/mongoose-auto-increment。您也可以尝试这些。

另外,关于你得到的错误: 任何文档都是一个对象,应该包含在curly brackets内,你不能在同一个文档中定义两个独立的对象。所以你得到了这个错误。

答案 1 :(得分:0)

复制在类似 Github issue comment 上给出的答案:

<块引用>

存在 _id 选项是为了防止创建一个选项并将其分配给 文档中的每个子文档。

所以,不是为了这个:

var Schema = mongoose.Schema,
ThingSchema = new Schema({    
   name: String,  
   categories: [{         
      label: {            
         type: String,            
         uppercase: true      
      },      
      value: String
   }]
}, {_id: false});
//   ^^^^^^^^^
// this won't work 

这是为了:

var Schema = mongoose.Schema,
ThingSchema = new Schema({
    name: String,
    categories: [{
       label: {
          type: String,
          uppercase: true
       },
       value: String,
       _id: false // <--- this works
    }]
}); 

花了我一段时间,但在遇到同样的问题后,我发现 文档 here