Мангуст - название коллекции Force

98

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

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. Как заставить имя коллекции в мангусте?

  • 5
    Забавный факт: мангуст знает, что множественное число быков - это волы, но не то, что множественное число гусей - это гуси.
Теги:
mongoose

8 ответов

152

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

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

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

  • 7
    Спасибо за это. Вот соответствующая ссылка: mongoosejs.com/docs/guide.html#collection
  • 1
    Спасибо @JonPage, мне было интересно, почему моя коллекция объектов Person была названа как люди. Ссылка, которую вы предоставили, является хорошей ссылкой. Я думаю, что этот метод задания имени пользовательской коллекции при создании схемы лучше, чем другой метод определения имени коллекции при создании модели.
Показать ещё 1 комментарий
61

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

mongoose.model('UserInfo', UserInfo, 'UserInfo');
  • 2
    также работал для мангуста 4.7.6
  • 0
    Отличный способ объявить название пользовательской коллекции на уровне модели.
15

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

Структура 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);
9

Вам нужно установить имя коллекции в вашей схеме.

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

Мангуста здесь. Мы рекомендуем делать mongoose.model('UserInfo', UserInfo, 'UserInfo'); третьим аргументом mongoose.model() является имя коллекции. Здесь соответствующие документы.

1

Ответ:

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

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

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

Параметры Объяснение:

  • 1-й параметр - название модели
  • Имя схемы второго параметра [схема]
  • Имя коллекции 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);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню