Mongoose - название коллекции Force

120

Я пытаюсь использовать мангуста для создания базы данных и коллекции в ней. Мой код:

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

Когда я запускаю этот код, mongoose создал коллекцию с именем UserInfo вместо userinfo. Как заставить имя коллекции в мангусте?

Рави
источник
14
Забавный факт: мангуст знает, что слово «бык» во множественном числе - это бык, но не знает, что слово «гусь» во множественном числе - гуси.
Шон Летендре

Ответы:

201

Это должно сделать это

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

См. Эту ссылку в документации Mongoose для получения дополнительной информации.

Томас Блобаум
источник
7
Спасибо за это. Вот соответствующая ссылка: mongoosejs.com/docs/guide.html#collection
Джон Пейдж
2
Спасибо @JonPage, мне было интересно, почему моя коллекция объектов Person была названа людьми. Приведенная вами ссылка является хорошей справочной информацией. Я думаю, что этот метод установки имени пользовательской коллекции при создании схемы лучше, чем другой метод определения имени коллекции при создании модели.
Bharat
Это было очень полезно. Я провел два дня, пытаясь что-то запросить.
Холт Мэнсфилд
79

Если вы используете mongoose 2.0.0, передайте collectionName в качестве третьего аргумента.

mongoose.model('UserInfo', UserInfo, 'UserInfo');
Билал Хусейн
источник
Идеальный способ объявить собственное имя коллекции на уровне модели.
tezqa
25

По умолчанию Mongoose добавит "s" к имени коллекции. Если вы хотите избежать этого, просто передайте в качестве третьего аргумента имя коллекции:

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
Это лучшее предложение. Я всегда считал, что проще всего передать имя коллекции в mongoose.model (). Также хорошо для того, чтобы указать на то, как mongoose дает имя коллекции во множественном числе, что сбивало меня с толку, когда я только начинал.
Джон Моррисон
14

Структура API mongoose.model такова:

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

Мангуст делает следующее: если аргумент коллекции не передается, Mongoose создает имя коллекции, формируя имя модели во множественном числе. Если вам не нравится такое поведение, передайте имя коллекции или установите параметр имени коллекции схем.

Пример:

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

или

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

или

var collectionName = 'actor'
var M = mongoose.model('Actor', schema, collectionName);
Сэм
источник
11

Вам необходимо указать название коллекции в вашей схеме.

new Schema({...},{collection: 'userInfo'});
Джеймс Фройнд
источник
1

Ответ:

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

Лучшее объяснение с синтаксисом:

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

Описание параметров:

  • 1-й параметр - название название модели
  • 2-й параметр [схема] имя схемы
  • 3-й параметр [коллекция] имя коллекции (необязательно, вызвано названием модели)
  • 4-й параметр [skipInit], следует ли пропустить инициализацию (по умолчанию false)
Биджай Пал
источник
0

название вашей модели: userInfo.js

в файле экспресс-маршрута или app.js

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

затем в вашем userInfo.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var UserInfo = new Schema({
 username : String,
 password : String 
});
module.exports = mongoose.model('UserInfo', UserInfo);
Шьям Кумар Наллагунтла
источник