Mongoose - Forçar nome da coleção


120

Estou tentando usar o mangusto para criar um banco de dados e uma coleção nele. Meu código é:

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();

Quando executo esse código, o mongoose cria uma coleção chamada UserInfo em vez de userinfo. Como forçar o nome da coleção no mangusto?


14
Curiosidade: o mangusto sabe que o plural de bois é boi, mas não que o plural de ganso é gansos.
Sean Letendre

Respostas:


201

Isso deve servir

var UserInfo = new Schema({
  username : String,
  password : String 
}, { collection: 'userinfo' });

Veja este link da documentação do Mongoose para mais informações.


7
Obrigado por isso. Aqui está o link relevante: mongoosejs.com/docs/guide.html#collection
Jon Página

2
Obrigado @JonPage, estava me perguntando por que minha coleção de objetos Person foi nomeada como pessoas. O link que você forneceu é uma boa referência. Acho que este método de definir um nome de coleção personalizado ao criar um esquema é melhor do que o outro método de definir um nome de coleção ao criar o modelo.
Bharat,

Isso foi muito útil. Passei dois dias tentando consultar algo agora.
Holt Mansfield

79

Se você estiver usando o mongoose 2.0.0, passe o nome da coleção como o terceiro argumento

mongoose.model('UserInfo', UserInfo, 'UserInfo');

Maneira perfeita de declarar um nome de coleção customizado no nível do modelo.
tezqa

25

O Mongoose adicionará 's' ao nome da coleção por padrão. Se você quiser evitar isso, basta passar como terceiro argumento o nome da coleção:

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();

1
Esta é a melhor sugestão. Sempre achei mais fácil simplesmente passar o nome da coleção em mongoose.model (). Também é bom para apontar como o mangusto pluraliza o nome da coleção, o que foi confuso quando comecei.
John Morrison

14

A estrutura da API de mongoose.model é esta:

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

O que o mongoose faz é que, quando nenhum argumento de coleção é passado, o Mongoose produz um nome de coleção pluralizando o nome do modelo. Se você não gostar desse comportamento, passe um nome de coleção ou defina a opção de nome de coleção de esquemas.

Exemplo:

var schema = new Schema({ name: String }, { collection: 'actor' });

ou

schema.set('collection', 'actor');

ou

var collectionName = 'actor'
var M = mongoose.model('Actor', schema, collectionName);

11

Você precisa definir o nome da coleção em seu esquema.

new Schema({...},{collection: 'userInfo'});


1

Responda:

mongoose.model('UserInfo', UserInfo, 'userinfo'); //3rd parameter 'userinfo': as collection name

Melhor explicação com sintaxe:

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

Explicação dos parâmetros:

  • 1º parâmetro - nome nome do modelo
  • 2º parâmetro [esquema] nome do esquema
  • Nome da coleção do 3º parâmetro [coleção] (opcional, induzido do nome do modelo)
  • 4º parâmetro [skipInit] para ignorar a inicialização (o padrão é falso)

0

o nome do seu modelo: userInfo.js

no arquivo de via expressa ou app.js

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/testdb');

então em seu userInfo.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var UserInfo = new Schema({
 username : String,
 password : String 
});
module.exports = mongoose.model('UserInfo', UserInfo);
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.