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



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);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.