Mongoose - Paksa nama koleksi

120

Saya mencoba menggunakan luwak untuk membuat database dan koleksi di dalamnya. Kode saya adalah:

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

Ketika saya menjalankan kode ini, luwak membuat koleksi bernama UserInfo bukan userinfo. Bagaimana cara memaksa nama koleksi di luwak?

ravi
sumber
14
Fakta menyenangkan: luwak tahu bahwa bentuk jamak dari lembu adalah lembu, tetapi bukan bentuk jamak dari angsa adalah angsa.
Sean Letendre

Jawaban:

201

Ini harus dilakukan

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

Lihat tautan ini dari dokumentasi Mongoose untuk informasi lebih lanjut.

Thomas Blobaum
sumber
7
Terima kasih untuk ini. Berikut tautan yang relevan: mongoosejs.com/docs/guide.html#collection
Jon Halaman
2
Terima kasih @JonPage, saya bertanya-tanya mengapa koleksi objek Person saya dinamai sebagai orang. Tautan yang Anda berikan adalah referensi yang bagus. Saya pikir metode pengaturan nama koleksi khusus saat membuat skema ini lebih baik daripada metode lain untuk menentukan nama koleksi saat membuat model.
Bharat
Ini sangat membantu. Saya menghabiskan dua hari mencoba menanyakan sesuatu sekarang.
Holt Mansfield
79

Jika Anda menggunakan mongoose 2.0.0, teruskan collectionName sebagai argumen ketiga

mongoose.model('UserInfo', UserInfo, 'UserInfo');
Bilal Husain
sumber
Cara sempurna untuk mendeklarasikan nama koleksi khusus di tingkat model.
tezqa
25

Mongoose akan menambahkan 's' ke nama koleksi secara default. Jika Anda ingin menghindarinya, berikan nama koleksi sebagai argumen ketiga:

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();
vijay kumar
sumber
1
Ini adalah saran terbaik. Saya selalu merasa paling mudah dengan meneruskan nama koleksi di mongoose.model (). Juga bagus untuk menunjukkan bagaimana luwak memajemukan nama koleksi, yang membingungkan saat saya pertama kali memulai.
John Morrison
14

Struktur API mongoose.model adalah ini:

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

Apa yang dilakukan luwak adalah, Ketika tidak ada argumen koleksi yang dilewatkan, Mongoose menghasilkan nama koleksi dengan menjumlahkan nama model. Jika Anda tidak menyukai perilaku ini, berikan nama koleksi atau setel opsi nama koleksi skema Anda.

Contoh:

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

atau

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

atau

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

Anda perlu menyetel nama koleksi di skema Anda.

new Schema({...},{collection: 'userInfo'});
James Freund
sumber
9

Pemelihara luwak di sini. Sebaiknya lakukan mongoose.model('UserInfo', UserInfo, 'UserInfo');, arg ke ketiga mongoose.model()adalah nama koleksi. Berikut dokumen yang relevan .

vkarpov15.dll
sumber
1

Menjawab:

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

Penjelasan yang lebih baik dengan sintaks:

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

Penjelasan Parameter:

  • Parameter pertama - nama model nama
  • Nama skema [skema] parameter ke-2
  • Parameter ke-3 [koleksi] nama koleksi (opsional, diinduksi dari nama model)
  • Parameter ke-4 [skipInit] apakah akan melewati inisialisasi (default ke false)
Bijay Pal
sumber
0

nama model Anda: userInfo.js

dalam file rute ekspres atau app.js

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

lalu di userInfo.js Anda

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var UserInfo = new Schema({
 username : String,
 password : String 
});
module.exports = mongoose.model('UserInfo', UserInfo);
Shyam Kumar Nallaguntla
sumber