MongoDB触发器不做任何事情,甚至一切都是正确的

lrpiutwd  于 2023-01-20  发布在  Go
关注(0)|答案(1)|浏览(145)

我在使用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"}}')

DataModel

qyswt5oh

qyswt5oh1#

DueDate字段的数据类型可能是UTC日期时间,而.toISOString()返回的是字符串,MongoDB查询操作符是类型敏感的,因此它们不会匹配。
而是直接在查询中使用date对象,如下所示:

var filter = {DueDate: {$lt: now}, Borrowed: true};

相关问题