如何获取在另一个模型中定义的mongoose数据库的Schema

Huy*_*ran 51 javascript mongoose mongodb nosql node.js

这是我的文件夹结构:

+-- express_example
|---- app.js
|---- models
|-------- songs.js
|-------- albums.js
|---- and another files of expressjs
Run Code Online (Sandbox Code Playgroud)

我在文件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);
Run Code Online (Sandbox Code Playgroud)

这是我的文件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);
Run Code Online (Sandbox Code Playgroud)


如何制作albums.js知道SongSchema被定义为AlbumSchema

ale*_*lex 88

您可以直接使用Mongoose获取其他地方定义的模型:

require('mongoose').model(name_of_model)
Run Code Online (Sandbox Code Playgroud)

要在albums.js中获取示例中的架构,您可以执行以下操作:

var SongSchema = require('mongoose').model('Song').schema
Run Code Online (Sandbox Code Playgroud)

  • 我得到了完全相同的东西.最后使用`var SongSchema = require('mongoose').模型('Song').schema`来修复它(即我添加了`.schema`来专门获取模型的模式). (11认同)

pet*_*len 25

要从已注册的Mongoose模型获取模式,您需要专门访问模式:

var SongSchema = require('mongoose').model('Song').schema;
Run Code Online (Sandbox Code Playgroud)


rob*_*nix 6

对于不熟悉 Mongoose 工作原理的更深层次的其他人来说,现有的答案可能会令人困惑。

这是从另一个文件导入模式通用实现示例,该文件可供来自更通用上下文的更广泛受众访问。

const modelSchema = require('./model.js').model('Model').schema
Run Code Online (Sandbox Code Playgroud)

这是问题中特定情况的修改版本(这将albums.js 中使用)。

const SongSchema = require('./songs.js').model('Song').schema
Run Code Online (Sandbox Code Playgroud)

从这里,我可以看到您首先访问并要求文件通常如何要求模型,除非在这种情况下您现在专门访问该模型的架构。

其他答案需要变量声明中const mongoose = require('mongoose');使用 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]
});
Run Code Online (Sandbox Code Playgroud)