Mongoose —コレクション名を強制する


120

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という名前のコレクションを作成しました。マングースでコレクション名を強制する方法は?


14
面白い事実:マングースは複数の牛が牛であることを知っていますが、複数のガチョウがガチョウであることを知っていません。
Sean Letendre

回答:


200

これでうまくいくはずです

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

詳細については、Mongooseのドキュメントにあるこのリンクを参照してください。


7
これをありがとう。:ここでは、関連リンクのmongoosejs.com/docs/guide.html#collection
ジョンページ

2
@JonPageに感謝します。なぜ、PersonオブジェクトのコレクションがPeopleと名付けられたのか疑問に思いました。あなたが提供したリンクは良いリファレンスです。スキーマを作成するときにカスタムコレクション名を設定するこの方法は、モデルを作成するときにコレクション名を定義する他の方法よりも優れていると思います。
Bharat 2015年

これはとても役に立ちました。私は2日間を費やして、現在何かを照会しようとしました。
Holt Mansfield

79

mongoose 2.0.0を使用している場合は、3番目の引数としてcollectionNameを渡します

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

モデルレベルでカスタムコレクション名を宣言するのに最適な方法です。
tezqa

25

Mongooseはデフォルトでコレクション名に「s」を追加します。それを避けたい場合は、3番目の引数としてコレクションの名前を渡してください:

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()でコレクション名を渡すのが最も簡単だといつも思っていました。mongooseがコレクション名をどのように複数形にするかを指摘するのにも役立ちます。これは、私が最初に始めたときに混乱していました。
ジョンモリソン

14

mongoose.modelのAPI構造は次のとおりです。

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

mongooseが行うことは、コレクション引数が渡されない場合、Mongooseはモデル名を複数形にしてコレクション名を生成します。この動作が気に入らない場合は、コレクション名を渡すか、スキーマコレクション名オプションを設定してください。

例:

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

または

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

または

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


9

マングースのメンテナーはこちら。を実行することをお勧めしますmongoose.model('UserInfo', UserInfo, 'UserInfo');。3番目の引数mongoose.model()はコレクション名です。こちらが関連ドキュメントです。


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);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.