Mongoose 模式和集合

Posted

技术标签:

【中文标题】Mongoose 模式和集合【英文标题】:Mongoose schemas and collections 【发布时间】:2015-03-22 01:06:23 【问题描述】:

大家好,这是我第一次在这里提问,

我是 MEAN 堆栈的新手,现在我正在尝试使用它开发应用程序。据我了解,在 mongodb 中,Schema(数据库)可以有一个或多个集合(表(?)),当我使用 mongoose 时,我定义了一个 Song 模型和一个 Artist 模型:

对于歌曲:

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

var songSchema = new Schema(
  songName:        type: String ,
  songArtist:     [type : Schema.Types.ObjectId, ref : 'Artist']   
);

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

艺术家:

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

var artistSchema = new Schema(
  artistName:        type: String 
);

module.exports = mongoose.model('Artist', artistSchema);

我的 app.js 看起来像这样:

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/song', function(err, res) 
    if(err) throw err;
    console.log('Connected to Database');
);

var models = require('./models/song')(app, mongoose);

据我了解和看到的问题是,我正在创建 2 个数据库/模式,而我想创建一个数据库/模式并在其中包含这两个集合:

SongDatabase:
--- Song
--- Artist

在这种情况下,我应该如何使用我的 mongoose 模型/控制器和我的 app.js 执行此操作?在此先感谢:)

【问题讨论】:

您只需要在您的应用程序中发出mongoose.connect 一次,并且“数据库”在连接字符串中定义。除非您特别说明,否则所有集合都将在该数据库中创建。您似乎在这里混淆了术语。我建议先做一些 mongoose 和 MongoDB 教程以正确理解。易于搜索。 我已经搜索了几个教程,但它们都只使用一个连接,你能提供一个看起来像我想做的事情吗? (1 db,2 个集合) 【参考方案1】:

问题在于您的连接字符串是 mongodb://localhost/song

Song 成为你的数据库,在 Song 中你应该可以看到两个合集 - 宋S - 艺术家

可能的解决方案:刷新数据库,全部删除。开始清理并检查您的应用程序在做什么。为数据库使用另一个名称

【讨论】:

【参考方案2】:

我通过查看this tutorial 解决了我的所有疑问,正如您在此处看到的那样,它们在一个数据库中实现了两个集合(我最初关心的问题)。一旦你连接到数据库并且你对你想要的集合执行一个帖子,在这个例子中是线程或帖子,它会将集合创建到 mongodb 中。

【讨论】:

以上是关于Mongoose 模式和集合的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose:在一个集合下动态加载不同的模式

如何在 Mongoose 中设置数据库名称和集合名称?

Mongoose 存储另一个集合的 ObjectId 的引用

从同一数据库mongoose,ejs中的另一个集合中获取数据

查询集合而不在猫鼬中传递模式

在Mongodb中使用多个模式进行单个集合无法正常工作