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
It means that Mongoose is looking for a value with the key of "any", literally. If your request body does not contain such key (and it does not, as it only contains name and age), it will not be picked up when you save the new object. What you are experiencing is the expected behaviour of Mongoose.
Mongoose | save() Function The save() function is used to save the document to the database. Using this function, new documents can be added to the database.
By default, Mongoose adds an _id property to your schemas. const schema = new Schema(); schema.path('_id'); // ObjectId { ... } When you create a new document with the automatically added _id property, Mongoose creates a new _id of type ObjectId to your document. const Model = mongoose.
exports = mongoose. model('User',{ id: String, username: String, password: String, email: String, firstName: String, lastName: String }); It will automatically creates new "users" collection.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With