收藏
回答

云函数中如何根据a字段[number]大于等于(当前日期-b字段[更新日期])更新c字段?

已解决

数据举例:

{

showDay:3,

updateDate:Tue Jan 19 2021 08:00:01 GMT+0800 (中国标准时间)

flag:1

}

需求:

showDay 大于等于 (现在时间减去updateDate除以86400000)的数据,flag更新为0。

问题:

.where中使用$.divide([($.subtract([currentTime, '$updateDate'])),86400000])无效。

代码:

.where({

showDay:_.gte($.divide([($.subtract([currentTime,'$updateDate'])),86400000]))

})

是因为$.是在聚合阶段使用的原因吗?

但如果.aggregate()后如何update呢?

试了很久都没有成功,特来求助。

感谢各位。

----------------------------

有时候思路会陷入自己的预设,不能break。

为什么一定要在aggregate以后update呢?它本身就不是update的前置条件呀。

所以一定是在update之前筛选出数据,而不是聚合数据。

所以,如下:

.where(

  _.expr(

  $.eq(["$goodsFlag","1"]),

  $.gte([("$showDay"),($.divide([($.subtract([currentTime,'$updateDate'])),86400000]))])

  )

)


最后一次编辑于  01-26
回答关注问题邀请回答
收藏

2 个回答

  • 乔
    01-26

    昨天夜里脑子短路了,然后一直不能复位。

    然后今天用了2分钟,看了一下文档关于command的内容。

    expr闪闪亮…

    .where(

      _.expr(

      $.neq(["$_id","000_testGoodsId"]),

      $.eq(["$goodsFlag","1"]),

      $.gte([("$showDay"),($.divide([($.subtract([currentTime,'$updateDate'])),86400000]))])

      )

    )

    完成。

    01-26
    有用 1
    回复
  • 跨商通
    跨商通
    01-26

    where和$不会并存在一条语句里。

    将$换成_吧,对应的,换成command批令集而不是aggregate指令集。

    aggregate无法update。

    01-26
    有用 1
    回复 3
    • 乔
      01-26
      _不可以的,因为在command里貌似没有subtract方法,所以后来为了能在非聚合阶段使用聚合函数,where中我使用了_.expr()
      01-26
      回复
    • 乔
      01-26
      感谢您提供思路,我去看了一遍command下的方法,问题解决了,感谢。
      01-26
      回复
    • 跨商通
      跨商通
      01-26回复
      好吧。忘了这个_.expr。。。
      01-26
      回复
登录 后发表内容
问题标签