Mongoose

MongoDB 异步模型工具
授权协议 MIT
开发语言 JavaScript
所属分类 数据库相关、 数据库建模
软件类型 开源软件
地区 不详
投 递 者 姜天宇
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Mongoose 是设计用于异步环境的 MongoDB 对象模型工具,支持 promises 和 callbacks。

概述

连接到 MongoDB

首先需要定义一个连接。如果应用仅使用一个数据库,则使用mongoose.connect。如果需要创建其他连接,请使用mongoose.createConnection

connect 和 createConnection都使用 mongodb://URI,或者 host, database, port, options参数。

await mongoose.connect('mongodb://localhost/my_database');

连接后,open将在Connection实例上触发该事件。

注意: 如果本地连接失败,请尝试使用 127.0.0.1 而不是 localhost,更改本地主机名可能会出现问题。

Mongoose 会缓冲所有命令,直到它连接到数据库,这意味着不必等到它连接到 MongoDB 才开始定义模型、运行查询。

定义模型

模型是通过 Schema 接口定义的:

const Schema = mongoose.Schema;
const ObjectId = Schema.ObjectId;

const BlogPost = new Schema({
  author: ObjectId,
  title: String,
  body: String,
  date: Date
});

除了定义文档的结构和存储的数据类型之外,Schema 还处理以下定义:

以下是上述功能的一些用法:

const Comment = new Schema({
  name: { type: String, default: 'hahaha' },
  age: { type: Number, min: 18, index: true },
  bio: { type: String, match: /[a-z]/ },
  date: { type: Date, default: Date.now },
  buff: Buffer
});

// a setter
Comment.path('name').set(function (v) {
  return capitalize(v);
});

// middleware
Comment.pre('save', function (next) {
  notify(this.get('email'));
  next();
});

查看examples/schema/schema.js示例中的典型设置端到端示例。

访问模型

一旦我们通过 mongoose.model('ModelName', mySchema)定义了一个模型,就可以通过相同的函数访问它:

const MyModel = mongoose.model('ModelName');

或者一次性完成:

const MyModel = mongoose.model('ModelName', mySchema);

第一个参数是模型所针对的集合的单数名称。Mongoose 会自动查找模型名称的复数形式例如:

const MyModel = mongoose.model('Ticket', mySchema);

Mongoose 会为 tickets 集合建立模型,而不是 ticket 集合。

一旦我们有了模型,就可以实例化并保存它:

const instance = new MyModel();
instance.my.key = 'hello';
instance.save(function (err) {
  //
});

可以从同一个集合中找到文档

MyModel.find({}, function (err, docs) {
  // docs.forEach
});
  • Mongoose是C语言网络库,为TCP、UDP、HTTP、WebSocket、CoAP、MQTT实现了事件驱动型的非阻塞api。 Mongoose库 Mongoose是出名的嵌入式网络编程库(https://github.com/cesanta/mongoose);只需微小的静态和运行时占用空间,实现了: 普通TCP、普通UDP、SSL/TLS(单向或双向)、客户端和服务器。 http客户端和服

  • 概念 是npm提供 的包,主要用于能够在nodejs中使用MongoDB的数据库并进行数据交互。mongoose本身提供了很多api来操作数据库,api就需要开发人员在nodejs程序中调用。 作用 能够使用程序来操作MongoDB数据库 安装 mongoose npm i mongoose 在nodejs中连接数据库 声明db.js 在db.js中开头引入模块后添加以下代码: const mo

 相关资料
  • 抽象异步模型 对回调模型抽象出异步接口Async。 只有一个方法的接口通常都可以使用闭包代替,区别在于interface引入新类型,闭包则不会。如果说thunkify依赖了参数顺序的弱约定,Async相对严肃的依赖了类型。 <?php interface Async { public function begin(callable $callback); } // AsyncTask符

  • 异步模块 if (isIE8) { require.async('compatible-ie8.js', function(exports){ // ... }); } else if (isIE6) { require.async('compatible-ie6.js', function(exports){ // ... });

  • 问题内容: 我仔细研究了的细节,才知道,它实质上支持单线程模型,但支持异步编程。 在这种情况下如何处理异步编程?就像运行时本身创建和管理线程,但是程序员不能显式创建线程吗?如果有人可以指向我一些资源来了解这一点,那就太好了。 问题答案: 现在和我一起说: 异步编程并不一定意味着多线程。 Javascript是一个单线程运行时-您无法在JS中创建新线程,因为语言/运行时不支持它。 弗兰克(英语)正确

  • 异步模块 异步模块与同步模块相反,指的是模块是在运行时才去异步加载然后再运行。 setTimeout(function(){ // 异步模块`async.js`在 1000ms 后加载,然后再运行 require.async('async.js', function(exports){ // 模块加载完成后,返回模块的导出 // exports

  • 8.1 异步工作简介 异步机制是 vim8 版本引入的新机制,准确地说,是从 7.4 某个补丁开始引入,不过在 vim8 完善并正式发布。这一全新特性使得 vim 直接跳升一大版本号,可见意义非凡。 8.1.1 同步工作可能的问题 要理解异步的特性,不妨先回顾下在此之前只能同步工作的情况,会遭遇哪些不便。 比如要从一个目录下的文本文件中查找某个字符串,我们知道(在 unix 系统中)直接 有个 g

  • 问题内容: 我想知道配置模块导出的最佳方法是什么。在下面的示例中,“ async.function”可以是FS或HTTP请求,为示例起见简化了该请求: 这是示例代码(asynmodule.js): 如何仅在执行异步回调后导出模块? 编辑 有关我的实际用例的简短说明:我正在编写一个模块,用于在fs.exists()回调中配置nconf(https://github.com/flatiron/ncon

  • 问题内容: 是否可以异步加载Node.js模块? 这是标准代码: 但是我想写这样的东西: 有没有办法做到这一点?还是有一个很好的理由为什么不支持回调? 问题答案: 尽管是同步的,并且Node.js并未提供现成的异步变体,但是您可以轻松地自己构建一个变体。 首先,您需要创建一个模块。在我的示例中,我将编写一个模块,该模块从文件系统异步加载数据,但是当然是YMMV。因此,首先,使用老式的,不需要的同步

  • 本文向大家介绍详解socket阻塞与非阻塞,同步与异步、I/O模型,包括了详解socket阻塞与非阻塞,同步与异步、I/O模型的使用技巧和注意事项,需要的朋友参考一下 socket阻塞与非阻塞,同步与异步 1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步/异步主要针对C端: 同步: 所谓同步,就是在