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


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

Коли я запускаю цей код, мангуста створила колекцію під назвою 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 назвали людьми. Посилання, яке ви надали, є хорошим посиланням. Я думаю, що цей спосіб встановлення користувальницької назви колекції при створенні схеми кращий, ніж інший метод визначення імені колекції при створенні моделі.
Бхарат

Це було дуже корисно. Я провів два дні, намагаючись щось запитати.
Холт Менсфілд

79

Якщо ви використовуєте мангусту 2.0.0, передайте collectionName як третій аргумент

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

Ідеальний спосіб оголосити назву власної колекції на рівні моделі.
tezqa

25

Мангуст за замовчуванням додасть '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 (). Також добре підкреслити, як мангуст плюралізує назву колекції, що було заплутано, коли я вперше почав.
Джон Моррісон

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.