• mongoose的save无效的问题


    概述

    今天朋友遇到了使用mongoose中的save无效的问题,我通过查找资料帮他解决了,把心得记录下来,供以后开发时参考,相信对其他人也有用。

    参考资料:
    Mongoose学习参考文档——基础篇
    Mongoose官方文档

    mixed类型的save

    mixed类型=nested类型,也就是混合类型或者嵌套类型。这种类型没有特定的约束,可以随意修改,但是修改之后需要调用markModified(),然后才能save成功。

    person.anything = {x:[3,4,{y:'change'}]}
    person.markModified('anything');//传入anything,表示该属性类型发生变化
    person.save();
    

    promise和await

    参考资料:Built-in Promises

    一般来说,mongoose是通过回调函数来进行增删改查的,如下列save所示:

    product.sold = Date.now();
    product.save(function (err, product) {
      if (err) ..
    })
    

    如果不加回调函数,就会返回一个promise

    product.save().then(function(product) {
       ...
    });
    

    对于其它一些返回query的操作来说,不加回调函数,会返回一个带有then方法的对象,但是它并不是promise。

    var query = Band.findOne({name: "Guns N' Roses"});
    assert.ok(!(query instanceof Promise));
    
    // A query is not a fully-fledged promise, but it does have a `.then()`.
    query.then(function (doc) {
      // use doc
    });
    

    如果想将它变成一个真正的promise,执行exec()方法即可。

    // `.exec()` gives you a fully-fledged promise
    var promise = query.exec();
    assert.ok(promise instanceof Promise);
    
    promise.then(function (doc) {
      // use doc
    });
    

    对于async和await来说,直接在后面加上exec()方法即可。

    var query = await MyModel.findOne({}).exec();
    
  • 相关阅读:
    7.9学习日志
    7.8学习日志
    7.7学习日志
    未命名 1
    未命名 1
    未命名 1
    【转】搭建Mac OS X下cocos2d-x的Android开发环境
    【转】如何高效利用GitHub——2013-08-28 22
    【转】GitHub删除一个仓库——2013-08-27 21
    【转】Cocos2d-x 2.x CCSprite 灰白图的生成(利用shader设置)——2013-08-27 21
  • 原文地址:https://www.cnblogs.com/yangzhou33/p/9321064.html
Copyright © 2020-2023  润新知