首页 > 解决方案 > 使用 findOneAndUpdate() 时投射到日期失败

问题描述

我在 findOneAndUpdate() 的“更新”部分的日期字段中收到 CastError。我创建了以下测试来表示问题。据我了解,“2018-10-03T14:07:03.382Z”应该是通过 Mongoose 进行投射和更新的有效格式。我发现了大量类似的 SO 帖子,并使用 moment.js 将我的初始变量转换为各种格式,但看起来像上面这样的基本 ISO 字符串实际上应该可以工作。

我已经尝试调整为 $lte,在 findOneAndUpdate() 之外转换为 Date,使用 YYYY-MM-DD 格式,首先解析为 int 等,但我真的被我可能遗漏的东西弄得不知所措。如果这非常明显,请道歉。

常量更新T = B.findOneAndUpdate(

      //filter
      {
       //Using the below syntax in find() works perfectly
         "b_date" : {"$gte": new Date(bDateOrig)},
        'b_type':bTypeOrig,


     },
     //update
     {
        //Using the below results in CastError
        //if I comment the b_date line out, code runs as expected
       'b_date' : {"$gte": new Date('2018-10-03T14:07:03.382Z')},
      'b_type':bTypeNew,

    },
    //options
    {new:true}
)

总而言之-我希望了解在更新日期时是否需要考虑任何细微差别-例如。什么是正确的格式:

"$gte": 新日期('2018-10-03T14:07:03.382Z')

我很乐意提供更多详细信息 - 非常感谢您的阅读!

标签: javascriptnode.jsmongodbmongoosemomentjs

解决方案


首先,$gte是查询运算符,但您在更新中使用了它。

其次,您的b_date字段具有类型Date,因此它将尝试将整个转换{"$gte": new Date('2018-10-03T14:07:03.382Z')}Date. 这会导致 CastError。


推荐阅读