Mongoose - Koleksiyon adını zorla


120

Bir veritabanı ve içinde bir koleksiyon oluşturmak için firavun faresini kullanmaya çalışıyorum. Benim kodum:

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

Bu kodu çalıştırdığımda, mongoose userinfo yerine UserInfo adlı koleksiyon oluşturdu. Firavun faresinde koleksiyon adı nasıl zorlanır?


14
Eğlenceli gerçek: firavun faresi öküzün çoğulunun öküz olduğunu bilir, ancak kaz çoğulunun kaz olduğunu bilmiyor.
Sean Letendre

Yanıtlar:


201

Bu yapmalı

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

Daha fazla bilgi için Mongoose belgelerinden bu bağlantıya bakın .


7
Bunun için teşekkürler. İşte ilgili bağlantı: mongoosejs.com/docs/guide.html#collection
Jon Page

2
Teşekkürler @JonPage, Person nesneleri koleksiyonuma neden insanlar denildiğini merak ediyordum. Sağladığınız bağlantı iyi bir referanstır. Bir şema oluştururken özel bir koleksiyon adı belirleme yönteminin, modeli oluştururken diğer bir koleksiyon adı tanımlama yönteminden daha iyi olduğunu düşünüyorum.
Bharat

Bu çok yardımcı oldu. Şimdi bir şeyi sorgulamak için iki gün geçirdim.
Holt Mansfield

79

Firavun faresi 2.0.0 kullanıyorsanız, collectionName öğesini üçüncü bağımsız değişken olarak iletin

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

Model düzeyinde özel bir koleksiyon adı bildirmenin mükemmel yolu.
tezqa

25

Mongoose, varsayılan olarak koleksiyon adına 's' ekleyecektir. Bundan kaçınmak istiyorsanız, koleksiyonun adını üçüncü argüman olarak iletin:

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
Bu en iyi öneri. Koleksiyon adını mongoose.model () içinde iletmenin en kolay yol olduğunu her zaman buldum. Ayrıca firavun faresinin koleksiyon adını nasıl çoğullaştırdığını belirtmek için iyi, bu ilk başladığımda kafa karıştırıcıydı.
John Morrison

14

Mongoose.model'in API yapısı şudur:

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

Firavun faresinin yaptığı şey şudur: Koleksiyon bağımsız değişkeni iletilmediğinde, Mongoose model adını çoğullaştırarak bir koleksiyon adı üretir. Bu davranışı beğenmezseniz, bir koleksiyon adı verin veya şema koleksiyonu adı seçeneğini ayarlayın.

Misal:

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

veya

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

veya

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

11

Şemanızda koleksiyon adını ayarlamanız gerekir.

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

9

Firavun faresi bakıcısı burada. mongoose.model('UserInfo', UserInfo, 'UserInfo');Yapmanızı öneririz , üçüncü argüman mongoose.model()koleksiyon adıdır. İşte ilgili dokümanlar .


1

Cevap:

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

Sözdizimi ile daha iyi açıklama:

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

Parametreler Açıklaması:

  • 1. parametre - model adı adı
  • 2. parametre [şema] şema adı
  • 3. parametre [koleksiyon] koleksiyon adı (isteğe bağlı, model adından çıkarılır)
  • 4. parametre [skipInit] başlatmanın atlanıp atlanmayacağı (varsayılan olarak false şeklindedir)

0

model adınız: userInfo.js

ekspres yol dosyasında veya app.js'de

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

sonra userInfo.js'nizde

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

0

Üçüncü bir argümanın iletilmesi module.exports = mongoose.model('name', schema, 'collection'), daha önce yanıtlanmış olan model adına dayalı otomatik koleksiyon adını geçersiz kılar .. ancak 2 yol daha vardır,

mongoose.model doco bağlantısı için: https://mongoosejs.com/docs/api.html#mongoose_Mongoose-model

Bir koleksiyon adını manuel olarak girmenin 3 yöntemi vardır:

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

// or

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

// or

var collectionName = 'actor'
var M = mongoose.model('Actor', schema, collectionName)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.