mongodb - node.js使用mongoose,static方法如何自动添加时间?

 手机用户2502883113 发布于 2022-10-30 17:29

nodejs中使用mongoose连接mongodb,如何在static方法中自动添加时间?下面代码添加的时间一直是代码刚开始运行的时间。

import * as mongoose from 'mongoose';
const Schema = mongoose.Schema;
const ContentSchema = new Schema({
  content: {
    type: String
  },
  status: {
    type: Number
  },
  crawlAt: {
    type: Date
  }
}, { _id: false });

ContentSchema.statics.uniSave = async (doc,cb) => {
try{
    doc.crawlAt = doc.crawlAt ? doc.crawlAt : new Date;
    console.log(doc);
    await doc.save();
}catch(error){
    cb(error);
}}
const Crawl = mongoose.model('Crawl', ContentSchema,'crawl');

let document = new Crawl({content:"This is example",status: 404})

// 直接插入
Crawl.uniSave(document, v => console.log(v))

setTimeout(async function () {
  // 延迟插入
  await Crawl.uniSave(document, v => console.log(v))
}, 1000 * 10);

打印信息

// 直接插入
{ crawlAt: 2017-03-27T04:58:53.992Z,
  content: 'This is example',
  status: 404 }
// 延迟插入
{ crawlAt: 2017-03-27T04:58:53.992Z,
  content: 'This is example',
  status: 404 }
  

我想要的效果是延迟插入时间大于直接插入时间(例子是在10秒后),实际跑出来的两个时间是相等的。是因为setTimeout()方法的问题吗?

解决:我的问题是每次测试保存其实用的同一个文档,所以时间一直相同。
schema.static('method', cb)和schema.static.method = cb等价。

2 个回答
  • 想学习一下在static添加自定义时间,例如,更复杂的时间设置方式,楼上在schema中定义只能实现固定的时间点。

    2022-10-31 21:28 回答
  • 假如是自动添加时间,为什么不用:

    crawlAt: { type: Date, default: Date.now }


    依据您的想法,写了一个statics(使用到async/await)的使用栗子。请主要参考语法,希望有用:

    ContentSchema.statics.uniSave = async (doc,cb) => {
      try{
        doc.crawlAt = doc.crawlAt ? doc.crawlAt : new Date;
        console.log(doc);
        await doc.save();
      }catch(error){
        cb(error);
      }}
    
    const Crawl = mongoose.model('Crawl', ContentSchema,'crawl');
    
    let document = new Crawl({content:"This is example",status: 404})
    
    Crawl.uniSave(document, v => console.log(v))
    

    供参考。

    Love MongoDB! Have Fun!

    2022-10-31 21:28 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有