gpt4 book ai didi

node.js - 使用 node-cron 使用 mongoose 更新多个文档

转载 作者:太空宇宙 更新时间:2023-11-03 23:02:09 25 4
gpt4 key购买 nike

我正在尝试使用 node-cron 用 mongoose 更新多个文档。我想要完成的是,假设 7 月 1 日创建的所有文档将在 30 天后处于非事件状态。

我设法使用下面的代码更新多个文档,但我不知道如何使用日期早于当前日期的产品更新多个文档:

我知道如何获取小于当前日期的产品列表,但我不知道如何将此逻辑应用于下面的代码 -

let currentDate = new Date();
let query = Product.find({ dateCreated: {$lt: currentDate}});

Code is unrelated to what I'm trying to accomplish. This is a sample code that will update multiple documents every 10 seconds.

const mongoose  = require('mongoose');
const Product = require('../model/product');
const cron = require('node-cron');

cron.schedule('*/10 * * * * *', function(){
let productArray = ['Bacon', 'Apple', 'Fork', 'Beans'];
productArray.map(product => updateProduct(product));
});

let updateProduct = (name) => {
let randomNumber = Math.floor(Math.random() * (999 - 1 + 1));
let query = Product.findOne({name: name}).select({ 'name': 1 });
query.exec((err, product) => {
if(err) throw err;
if(product){
product.description = `Random description generate every 10 seconds: ${randomNumber}`;
product.save(err =>{
if(err) throw err;
console.log(`Successfully updated random description for: ${product.name}\n ${product.description}\n`);
});
}
});
};

Product Schema

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const productSchema = mongoose.Schema({
name : String,
description : String,
status : String,
dateCreated : { type: Date, default: Date.now }, //
});

module.exports = mongoose.model( 'Product', productSchema );

这是我知道的在 Mongoose 中更新多个文档的唯一方法。那么,在使用 mongoose 和 node-cron 创建 30 天后,还有其他方法可以更新 mongoose 中的多个文档吗?如果我的问题令人困惑,请原谅我。

最佳答案

这是完整版本的代码。

Here you no need to make multiple queries, like first selecting all the products whose currentdate has matched your criteria. Cause that you can do while updating the products itself.

const mongoose = require('mongoose');
const Product = require('../model/product');
const cron = require('node-cron');

cron.schedule('*/10 * * * * *', function() {
let productArray = ['Bacon', 'Apple', 'Fork', 'Beans'];
updateAllProducts(productArray, (err, res) => {
if (err)
//error handle, you can log here
else
//success handle, you can log here
})
});

let updateAllProducts = (productArray, callbackFn) => {
let randomNumber = Math.floor(Math.random() * (999 - 1 + 1));
description = `Random description generate every 10 seconds: ${randomNumber}`;
Product.update({
name: {
$in: productArray
},
dateCreated: {
$lt: currentDate
}
}, {
description: description
}, {
multi: true
}, (err, res) => {
if (err) {
callbackFn(err, null)
} else {
callbackFn(null, err);
}

});

};

在这种情况下,您还可以记录数据库更新是失败还是成功。因此可以更好地控制代码。而不是循环进行多个调用。这确实非常耗时且容易出错。

希望这有帮助!

关于node.js - 使用 node-cron 使用 mongoose 更新多个文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44917031/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com