我正在尝试使用node-cron用猫鼬更新多个文档。我要完成的工作是创建的所有文档(例如7月1日)在30天后将处于非活动状态。
我设法使用下面的代码更新多个文档,但是我不知道如何使用日期小于当前日期的产品更新多个文档:
我知道如何使用小于当前日期的产品列表,但不知道如何将此逻辑应用于以下代码-
let currentDate = new Date();
let query = Product.find({ dateCreated: {$lt: currentDate}});
代码与我要完成的工作无关。这是一个样本
代码将每10秒更新多个文档。
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`);
});
}
});
};
产品架构
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和node-cron创建30天后,还有其他方法可以更新mongoose中的多个文档吗?如果我的问题令人困惑,请原谅我。
最佳答案
在这里,您可以找到完整版本的代码。
在这里,您无需进行多个查询,例如先选择全部
当前日期符合您条件的产品。原因是
您可以在更新产品本身的同时进行。
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);
}
});
};
在这种情况下,您还可以记录Db更新是成功还是失败。因此,可以更好地控制代码。而不是循环进行多个呼叫。那将非常耗时且容易出错。
希望这可以帮助!
关于node.js - 使用node-cron用 Mongoose 更新多个文档,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44917031/