我在使用mongoDB时遇到了一个问题,我正在尝试创建触发器,它将获取服务器日期并将其与属性DueDate进行比较,如果DueTime小于或等于服务器时间,它应该将属性borrown转换为false。
问题是它不起作用,我很迷失,我什么都试过了。
这是我的触发函数:
exports = function(changeEvent) {
const mongo = context.services.get("MongoDB");
const now = new Date();
const booksLended = mongo.db("test").collection("bookslendeds");
var filter = {DueDate: {$lt: now.toISOString()}, Borrowed: true};
var update = {$set: {Borrowed: false}};
console.log(JSON.stringify(filter));
console.log(JSON.stringify(update));
return booksLended.updateMany(filter, update);
};
这是一个控制台日志:
> ran on Wed Jan 18 2023 23:48:10 GMT+0100 (Central European Standard Time)
> took 524.689137ms
> logs:
{"DueDate":{"$lt":"2023-01-18T22:48:11.778Z"},"Borrowed":true}
{"$set":{"Borrowed":false}}
> result:
{
"matchedCount": {
"$numberInt": "0"
},
"modifiedCount": {
"$numberInt": "0"
}
}
> result (JavaScript):
EJSON.parse('{"matchedCount":{"$numberInt":"0"},"modifiedCount":{"$numberInt":"0"}}')
1条答案
按热度按时间qyswt5oh1#
DueDate
字段的数据类型可能是UTC日期时间,而.toISOString()
返回的是字符串,MongoDB查询操作符是类型敏感的,因此它们不会匹配。而是直接在查询中使用date对象,如下所示: