Reputation: 742
I am using mongoose with node.js application. I don't want _id field in record. I am using this code to save my record without _id field. But it is giving error
document must have an _id before saving
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);
}
});
I am using mongoose version 3.8.14
Upvotes: 6
Views: 15330
Reputation: 1176
instade of writing this
{
player_id : { type: Number },
player_name : { type: String },
...}
write this:-
{
_id : { type: Number },
_name : { type: String },
_age : { type: Number },
_country : { type: String }
}
hence _id
will be players_id
then further write code like this:-
var athlete = new Player();
athlete._id = 1;
athlete._name = "Vicks";
athlete._age = 20;
athlete._country = "UK";
athlete.save(function(err) {
if (err){
console.log("Error saving in PlayerSchema"+ err);
}
});
Upvotes: 0
Reputation: 10460
Copying an answer given on a similar Github issue comment:
The
_id
option exists to prevent one being created and assigned to every sub-document within your document.So, it's not for this:
var Schema = mongoose.Schema, ThingSchema = new Schema({ name: String, categories: [{ label: { type: String, uppercase: true }, value: String }] }, {_id: false}); // ^^^^^^^^^ // this won't work
It's for this:
var Schema = mongoose.Schema, ThingSchema = new Schema({ name: String, categories: [{ label: { type: String, uppercase: true }, value: String, _id: false // <--- this works }] });
Took me a while but, after running into the same problem, I found the documentation here.
Upvotes: 3
Reputation: 1160
Unfortunately, You can not skip having a primary key for the document but you can override the primary key content, you can define your own primary key for each document.
Try the following schema for the same.
var PlayerSchema = new mongoose.Schema({
_id : { type: Number },
player_name : { type: String },
player_age : { type: Number },
player_country : { type: String },
} );
I have replaced your player_id
with _id
. Now you have control over the primary key of the document and the system won't generate the key for you.
There are some plugins which can also do the autoincremet
for your primary key. https://github.com/chevex-archived/mongoose-auto-increment. You might try these as well.
Also, about the error you are getting :
Any document is an object and should be wrapped inside the curly brackets
you can not define two independent object in the same document. So you are getting this error.
Upvotes: 3