web-dev-qa-db-ja.com

別のモデルで定義されたmongooseデータベースのスキーマを取得する方法

これは私のフォルダ構造です:

+-- express_example
|---- app.js
|---- models
|-------- songs.js
|-------- albums.js
|---- and another files of expressjs

ファイルsongs.jsの私のコード

var mongoose = require('mongoose')
, Schema = mongoose.Schema
, ObjectId = Schema.ObjectId;

var SongSchema = new Schema({
name: {type: String, default: 'songname'}
, link: {type: String, default: './data/train.mp3'}
, date: {type: Date, default: Date.now()}
, position: {type: Number, default: 0}
, weekOnChart: {type: Number, default: 0}
, listend: {type: Number, default: 0}
});

module.exports = mongoose.model('Song', SongSchema);

そして、これがalbums.jsファイルの私のコードです

var mongoose = require('mongoose')
, Schema = mongoose.Schema
, ObjectId = Schema.ObjectId;

var AlbumSchema = new Schema({
name: {type: String, default: 'songname'}
, thumbnail: {type:String, default: './images/U1.jpg'}
, date: {type: Date, default: Date.now()}
, songs: [SongSchema]
});

module.exports = mongoose.model('Album', AlbumSchema);


albums.jsにSongSchemaを定義するにはAlbumSchemaを知らせる方法

51
Huy Tran

Mongooseを使用して、他の場所で直接定義されたモデルを取得できます。

require('mongoose').model(name_of_model)

Albums.jsのサンプルのスキーマを取得するには、次のようにします。

var SongSchema = require('mongoose').model('Song').schema
88
alessioalex

登録済みのMongooseモデルからスキーマを取得するには、具体的にスキーマにアクセスする必要があります。

var SongSchema = require('mongoose').model('Song').schema;
25
peteallen

Mongooseがどのように機能するかについてより深い側面に精通していない他の人にとって、既存の答えは混乱を招く可能性があります。

一般化された実装schemaを、より一般的なコンテキストから来たより多くの聴衆にアクセス可能な別のファイルからインポートする例です。

const modelSchema = require('./model.js').model('Model').schema

以下は、質問の特定のケースの修正バージョンです(これはinside albums.jsを使用します)。

const SongSchema = require('./songs.js').model('Song').schema

これから、最初にファイルにアクセスし、通常はモデルを要求する方法をファイルに要求することがわかります。ただし、この場合は、そのモデルのスキーマに明確にアクセスします。

他の答えにはmongooseが必要ですwithin変数宣言。これは、const mongoose = require('mongoose');などの変数を宣言してからそのようなmongooseを使用する前にmongooseを要求する一般的な例に反します。このようなユースケースは、知識的にはアクセスできませんでした。


代替オプション

モデルのみを通常どおり要求し、モデルのスキーマプロパティを介してスキーマを参照できます。

const mongoose = require('mongoose');

// bring in Song model
const Song = require('./songs.js');

const AlbumSchema = new Schema({
    // access built in schema property of a model
    songs: [Song.schema]
});
3
robertunyx
var SongSchema = require('mongoose').model('Song').schema;

albums.jsの上記のコード行は確実に機能します。

3
Amol M Kulkarni