How to declare collection name and model name in mongoose

As you stated, When you write this,

mongoose.model('categories', CategorySchema);
mongoose.model('categories', TopicSchema);
mongoose.model('categories', ArticlesSchema);

The output becomes inappropriate so do this instead,

mongoose.model('category', CategorySchema);
mongoose.model('topic', TopicSchema);
mongoose.model('article', ArticlesSchema);

Bonus tip. Mongoose makes your collection name plural by default so change a little code if you want your collection name as you wrote.

mongoose.model('category', CategorySchema,'category');
mongoose.model('topic', TopicSchema,'topic');
mongoose.model('article', ArticlesSchema,'article');

Try-

mongoose.model('category', CategorySchema, 'categories');
mongoose.model('topics', TopicSchema, 'categories');
mongoose.model('articles', ArticlesSchema, 'categories');

As mentioned in docs: http://mongoosejs.com/docs/api.html#index_Mongoose-model

Mongoose#model(name, [schema], [collection], [skipInit])

Defines a model or retrieves it.

Parameters:

  • 1st param - name <String> model name
  • 2nd param - [schema] <Schema> schema name
  • 3rd param - [collection] <String> collection name (optional, induced from model name)
  • 4th param - [skipInit] <Boolean> whether to skip initialization (defaults to false)

See - https://stackoverflow.com/a/14454102/3896066