mongodb - node.js使用mongoose,static方法如何自动添加时间?
伊谢尔伦
伊谢尔伦 2017-04-17 16:23:47
0
2
408

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等价。

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

모든 응답(2)
刘奇

시간이 자동으로 추가되는 경우 다음을 사용해보세요.

crawlAt: { 유형: 날짜, 기본값: Date.now }


여러분의 아이디어를 바탕으로 정적 사용 예를 작성했습니다(async/await 사용). 주로 문법을 참고해주세요. 도움이 되셨으면 좋겠습니다:

으아악

참고로.

MongoDB를 사랑해주세요! 재미있게 보내세요!

小葫芦

정적으로 사용자 정의 시간을 추가하는 방법을 배우고 싶습니다. 예를 들어 위의 스키마에서 정의하는 좀 더 복잡한 시간 설정 방법은 고정된 시점만 달성할 수 있습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿