I am trying to use mongoose to create a database and a collection in it. My code is:
var mongoose = require('mongoose');
var db = mongoose.connect('mongodb://localhost/testdb');
var Schema = mongoose.Schema;
var UserInfo = new Schema({
username : String,
password : String
});
mongoose.model('UserInfo', UserInfo);
var user = db.model('UserInfo');
var admin = new user();
admin.username = "sss";
admin.password = "ee";
admin.save();
When I run this code, mongoose created collection named UserInfo instead of userinfo. How to force collection name in mongoose?
Mongoose never create any collection until you will save/create any document.
Naming convention of MongoDB Collection The name of the collection will be a UTF-8 character string. collection name will not start with system, because system. is a reserved keyword, e.g. system. users hold user database. collection in MongoDB is unique, likewise, the table in the database is unique.
The versionKey is a property set on each document when first created by Mongoose. This keys value contains the internal revision of the document. The name of this document property is configurable.
Mongoose is an ODM that provides a straightforward and schema-based solution to model your application data on top of MongoDB's native drivers.
This should do it
var UserInfo = new Schema({
username : String,
password : String
}, { collection: 'userinfo' });
See this link from the Mongoose documentation for more information.
If you are using mongoose 2.0.0, pass the collectionName as the third argument
mongoose.model('UserInfo', UserInfo, 'UserInfo');
Mongoose will add 's' to collection name by default. If you want to avoid that, just pass as third argument the name of the collection:
var mongoose = require('mongoose');
var db = mongoose.connect('mongodb://localhost/testdb');
var Schema = mongoose.Schema;
var UserInfo = new Schema({
username: String,
password: String
});
mongoose.model('UserInfo', UserInfo, 'UserInfo')
tan = new user();
admin.username = 'sss';
admin.password = 'ee';
admin.save();
API structure of mongoose.model is this:
Mongoose#model(name, [schema], [collection], [skipInit])
What mongoose do is that, When no collection argument is passed, Mongoose produces a collection name by pluralizing the model name. If you don't like this behavior, either pass a collection name or set your schemas collection name option.
Example:
var schema = new Schema({ name: String }, { collection: 'actor' });
or
schema.set('collection', 'actor');
or
var collectionName = 'actor'
var M = mongoose.model('Actor', schema, collectionName);
You need to set the collection name in your schema.
new Schema({...},{collection: 'userInfo'});
Mongoose maintainer here. We recommend doing mongoose.model('UserInfo', UserInfo, 'UserInfo');
, third arg to mongoose.model()
is the collection name. Here's the relevant docs.
Passing a third argument on module.exports = mongoose.model('name', schema, 'collection')
overrides the automatic collection name based on model name, which has already been answered.. but there are 2 other ways,
per mongoose.model doco link: https://mongoosejs.com/docs/api.html#mongoose_Mongoose-model
there are 3 methods to manually enter a collection name:
var schema = new Schema({ name: String }, { collection: 'actor' });
// or
schema.set('collection', 'actor');
// or
var collectionName = 'actor'
var M = mongoose.model('Actor', schema, collectionName)
Answer:
mongoose.model('UserInfo', UserInfo, 'userinfo'); //3rd parameter 'userinfo': as collection name
Better explanation with syntax:
Mongoose.model(name, [schema], [collection], [skipInit])
Parameters Explanation:
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