• 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();
    
  • 相关阅读:
    Django之admin
    CSS弹性盒子
    SQL SERVER按多字段查找重复的数据并删除只保留一条
    计算机名称改名之后,tfs连接问题
    Docker镜像仓库Harbor部署
    搭建docker本地仓库
    部署docker swarm集群
    Dockerfile
    centos 7 安装docker 常用指令
    python软件安装-Windows
  • 原文地址:https://www.cnblogs.com/yangzhou33/p/9321064.html
Copyright © 2020-2023  润新知