mongoose 文档(十) Promises

Built-in Promises

Mongoose 异步操作,像 .save() 和 queries,返回 Promises/A+ conformant promises. This means that you can do things like MyModel.findOne({}).then() and yield MyModel.findOne({}).exec() (if you‘re using co).

这就是说你可以做一些像MyModel.findOne({}).then() 和 yield MyModel.findOne({}).exec()(如果你在用co

为了向后兼容,mongoose 4默认返回mpromise promise。

  var gnr = new Band({
      name: "Guns N‘ Roses",
      members: [‘Axl‘, ‘Slash‘]
    });

    var promise = gnr.save();
    assert.ok(promise instanceof require(‘mpromise‘));

    promise.then(function (doc) {
      assert.equal(doc.name, "Guns N‘ Roses");
    });

Queries are not promises

mongoose查询不是promise。可是它有 yield 和 async/await 的 .then() 方法。如果你需要健全的promise,用.exec()方法。

  var query = Band.findOne({name: "Guns N‘ Roses"});
    assert.ok(!(query instanceof require(‘mpromise‘)));

    // A query is not a fully-fledged promise, but it does have a `.then()`.
    query.then(function (doc) {
      // use doc
    });

    // `.exec()` gives you a fully-fledged promise
    var promise = query.exec();
    assert.ok(promise instanceof require(‘mpromise‘));

    promise.then(function (doc) {
      // use doc
    });
  

插入到你的 Promises 库

在mongoose 4.1.0更新

在mpromise满足基本使用的情况下,高级用户可能想插入他们喜爱的ES6风格的Promise库bluebird,或只是使用原生的ES6 promise。设置mongoose.Promise 给你喜欢的ES6风格的promise构造函数然后mongoose会使用它。

   var query = Band.findOne({name: "Guns N‘ Roses"});

    // Use native promises
    mongoose.Promise = global.Promise;
    assert.equal(query.exec().constructor, global.Promise);

    // Use bluebird
    mongoose.Promise = require(‘bluebird‘);
    assert.equal(query.exec().constructor, require(‘bluebird‘));

    // Use q. Note that you **must** use `require(‘q‘).Promise`.
    mongoose.Promise = require(‘q‘).Promise;
    assert.ok(query.exec() instanceof require(‘q‘).makePromise);
  

MongoDB驱动的promise

mongoose.Promise属性设置mongoose使用promise。可是,这影响底层MongoDB驱动。如果你使用底层驱动,例如Mondel.collection.db.insert(),你需要做点额外工作来改变底层promise库。注意,下面的代码假设mongoose >= 4.4.4。

    var uri = ‘mongodb://localhost:27017/mongoose_test‘;
    // Use bluebird
    var options = { promiseLibrary: require(‘bluebird‘) };
    var db = mongoose.createConnection(uri, options);

    Band = db.model(‘band-promises‘, { name: String });

    db.on(‘open‘, function() {
      assert.equal(Band.collection.findOne().constructor, require(‘bluebird‘));
    });
时间: 2024-11-07 12:33:45

mongoose 文档(十) Promises的相关文章

mongoose 文档(四) queries

通过一些model的静态辅助方法可以检索document. 任何 涉及 指定 查询 条件的 model 方法都能通过两个方法执行. 当一个回调函数: 被传递,操作将立即执行,结果传给回调. 没有被传递,返回一个 查询 实例,它提供一个特殊的查询生成接口. 在mongoose 4,Query有 then()函数,因此可以被用来作为一个 promise. 用回调函数执行查询时,将请求指定为JSON 文档.JSON文档的语法和 MongoDB shell 一样. var Person = mongoo

mongoose 文档(二)Models

Models是从 Schema 定义编译的构造函数.这些 model 的实例代表能从数据库存储和检索的 documents.数据库中所有document的创建和检索都是这些model处理的. 1.编译第一个model var schema = new mongoose.Schema({ name: 'string', size: 'string' }); var Tank = mongoose.model('Tank', schema); 第一个参数是 model 对应的 collection

mongoose 文档(七) Population

在mongoose中没有join但有时我们仍然想引用其他collection的document,population由此而来. population是自动将document中指定path替换为其他collection的document的过程.我们能迁移document.多个document.简单对象.多个简单对象或者是查询返回的所有对象. var mongoose = require('mongoose') , Schema = mongoose.Schema var personSchema

mongoose 文档(八) Connections

我们可以通过利用mongoose的connect()方法连接到MongoDB . mongoose.connect('mongodb://localhost/myapp'); 这是在默认端口(27017)连接到在本地运行的myapp数据库的最低需要.如果本地连接失败那么尝试使用127.0.0.1代替localhost.当本地主机名改变有时会出现问题. 我们也能根据你的环境指定URI中的几个参数. mongoose.connect('mongodb://username:[email protec

mongoose 文档(一) schemas

1.定义shcema 在mongoose里一切都由schema开始.每一个schema对应一个mongoDB collection 并且在那个collection里面定义了documents的模型. var mongoose = require('mongoose'); var Schema = mongoose.Schema; var blogSchema = new Schema({ title: String, author: String, body: String, comments:

mongoose 文档(九) Plugins

插件 schema是可插入的,即,它们可以应用预包装的能力,从而扩展其功能.这是一个非常强大的功能. 假设我们有几个collection在我们的数据库中,要添加的 last-modified功能给它们.用插件会很容易.只需创建一个插件,并把它应用到每个Schema: // lastMod.js module.exports = exports = function lastModifiedPlugin (schema, options) { schema.add({ lastMod: Date

Mongoose学习参考文档——基础篇

Mongoose学习参考文档 前言:本学习参考文档仅供参考,如有问题,师请雅正 一.快速通道 1.1 名词解释 Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力 Model : 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对 Entity : 由Model创建的实体,他的操作也会影响数据库 注意: 1.本学习文档采用严格命名方式来区别不同对象,例如: var PersonSchema; //Person的文本属性 var PersonModel; //

Welcome to Swift (苹果官方Swift文档初译与注解三十五)---248~253页(第五章-- 函数 完)

Function Types as Return Types (函数类型作为返回值类型) 一个函数的类型可以作为另一个函数的返回值类型.可以在一个函数的返回值箭头后面写上一个完整的函数类型. 例如: 下面的例子定义了两个简单的函数,分别为stepForward 和 stepBackward.其中stepForward函数返回值比它的输入值多1,stepBackward函数返回值比它输入值少1.这两个函数的 类型都是(Int) -> Int: func stepForward(input: Int

Welcome to Swift (苹果官方Swift文档初译与注解十)---63~69页(第二章)

如果你将整型与浮点型一起使用,结果将被认为是Double类型: et anotherPi = 3 + 0.14159 // anotherPi 的类型是Double 上述代码中,3的值是没有明确说明类型,因此,根据剩余部分的浮点类型可以确定返回值为Double. Numeric Literals (数值的进制表示) 整数类型可以进行如下表示: A decimal number, with no prefix         // 十进制数值,不需要前缀符号; A binary number, w