当前位置: 首页 > 面试题库 >

猫鼬模式创建

丌官皓君
2023-03-14
问题内容

我刚开始是猫鼬。我有一个带猫鼬的创建脚本,该脚本用示例数据创建模式和数据库。

现在,我编写实际的应用程序。每次我的应用程序运行时,我是否需要创建模式对象,或者它已经以某种方式可用?

换句话说,我是否需要在每个使用猫鼬访问数据库的应用程序中运行此代码,还是仅在第一次运行此代码:

var Comments = new Schema({
    title     : String
  , body      : String
  , date      : Date
});

如果我有设置器/验证器/等,答案将如何变化?


问题答案:

一个定义就是Schema让应用程序理解如何将数据从MongoDB映射到JavaScript对象。Schema是应用程序的一部分。它与数据库
无关 。它仅将数据库映射到JavaScript对象。所以是的-如果您想获得漂亮的映射,则需要在 每个
需要它的应用程序中运行此代码。它也适用于getters / setters / validations / etc。

但是请注意,这样做:

var mongoose = require('mongoose');
var Schema = mongoose.Schema; // <-- EDIT: missing in the original post
var Comments = new Schema({
    title     : String
  , body      : String
  , date      : Date
});
mongoose.model("Comments", Comments);

将在全球注册Schema。这意味着,如果您正在运行的应用程序正在使用某个外部模块,那么在此模块中,您可以简单地使用

var mongoose = require('mongoose');
var Comments = mongoose.model("Comments");
Comments.find(function(err, comments) {
    // some code here
});

(请注意,您实际上需要Schema在使用此代码之前注册,否则将引发异常)。

但是,所有这些操作仅在一个节点会话内有效,因此,如果您正在运行另一个需要访问的节点应用程序Schema,则需要调用注册代码。因此,最好在单独的文件中定义所有模式,例如,comments.js可能看起来像这样

var mongoose = require('mongoose');
var Schema = mongoose.Schema; // <-- EDIT: missing in the original post

module.exports = function() {
    var Comments = new Schema({
        title     : String
      , body      : String
      , date      : Date
    });
    mongoose.model("Comments", Comments);
};

然后创建models.js看起来像这样的文件

var models = ['comments.js', 'someothermodel.js', ...];

exports.initialize = function() {
    var l = models.length;
    for (var i = 0; i < l; i++) {
        require(models[i])();
    }
};

现在调用require('models.js').initialize();将初始化给定节点会话的所有模式。



 类似资料:
  • 问题内容: 如何将一个架构添加到另一个架构?这似乎无效: 我检查了网站,它显示了如何为数组声明而不是为单个声明。 谢谢 问题答案: 有几种方法可以做到这一点。最简单的就是这样: 然后,您只需确保您的应用程序正在编写该ID,并在查询中使用该ID即可根据需要提取“相关”数据。 按用户ID搜索任务很好,但按任务ID查询用户则比较麻烦: 另一种方法是利用Mongoose的填充功能来简化查询。为此,您可以执

  • 问题内容: 在阅读教程时,通常会在模式和模型之间进行区分,特别是在处理mongoose / mongodb时。由于在该系统下似乎不存在“模型”,因此移植到Postgresql会有些混乱。两种方法有什么区别? 例如,此行的postgres / sql ORM等价于什么? (猫鼬和express.js): 问题答案: 在猫鼬中,模式表示特定文档的结构,可以是完整文档,也可以是文档的一部分。这是表达期望

  • 问题内容: 我正在学习平均堆栈,当我尝试使用启动服务器时 我有一个例外说: 这是我在/models/Posts.js中的代码 如我所见,应该为模型“ Post”注册架构,但是什么原因可能导致引发异常? 提前致谢。 编辑: 这是异常错误 这是带有猫鼬初始化的app.js代码: 前行: 问题答案: 模型导出不是问题。我遇到过同样的问题。 真正的问题是需要模型声明 低于路线依赖关系。只需将mongoDB

  • 问题内容: 知道如何在Mongoose模式中为Tree文档建模吗? 一个人怎么能这样呢?整个树是一个文档(理想情况下)。 问题答案: 来自https://groups.google.com/forum/#!topic/mongoose- orm/0yUVXNyprx8 : 通过设计,它可能会起作用。没有测试。为此,我在那里产生了递归引用: 因此,您需要逐步构造递归。

  • 问题内容: 我对在我的主模式中使用子文档和更深层的优缺点感到好奇: 要么 我目前在各处使用子文档,但主要是想知道性能或查询我可能遇到的问题。 问题答案: 根据文档,它是完全一样的。但是,使用Schema也会添加一个字段(只要您没有禁用该字段),并且大概会使用更多资源来跟踪子文档。 备用声明语法 v3中的新增功能 如果不需要访问子文档架构实例,则还可以通过简单地传递对象文字来声明子文档[…]

  • 问题内容: 我在这里看到了很多关于这个问题的答案,但是我还是不明白(也许是因为他们使用了更多“复杂”的例子)……所以我试图做的是为“客户”建立一个模式将具有两个具有嵌套“子字段”的字段,其他字段可能重复。这是我的意思: 电话 和 电子邮件 可能是一个数组。和地址将不会重复,但是您会看到一些子字段。 我该如何工作? 问题答案: