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?


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.


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

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

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

11

Anda perlu menyetel nama koleksi di skema Anda.

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


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)

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);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.