Directus Flow读取数据操作:如何在过滤器中提取$now的月份
问题:筛选当月过生日的顾问
我有一个包含consultant的集合,其中有birthdate字段,想要创建Flow读取所有当月过生日的顾问。
尝试了以下配置但无法生效:
{ "collection": "Consultant", "query": { "filter": { "month(birthdate)": { "_eq": "month($now)" } } } }
但硬编码月份时可以正常运行:
{ "collection": "Consultant", "query": { "filter": { "month(birthdate)": { "_eq": "7" } } } }
需要解决的问题:如何在过滤器中从$now提取当前月份?
解决方案
问题出在你直接在过滤器的键和值中使用函数调用,这种写法不被支持。你需要使用表达式操作符来实现字段函数和当前时间函数的比较,以MongoDB Flow为例,正确的配置应该使用$expr来包裹比较逻辑:
{ "collection": "Consultant", "query": { "filter": { "$expr": { "$eq": [ {"$month": "$birthdate"}, {"$month": "$$NOW"} ] } } } }
说明
$expr允许你在查询过滤器中使用聚合表达式,这样就能对字段和系统变量进行函数运算后再比较{"$month": "$birthdate"}提取birthdate字段的月份{"$month": "$$NOW"}提取当前系统时间的月份(注意不同工具的系统时间变量名可能有差异,需根据你使用的Flow工具调整)
如果你的Flow工具不支持$expr,可以采用前置步骤的方式:
- 添加一个步骤,用工具内置的日期函数提取
$now对应的月份 - 将提取出的月份存储为变量(比如
currentMonth) - 在过滤器中直接引用这个变量:
{ "collection": "Consultant", "query": { "filter": { "month(birthdate)": { "_eq": "{{currentMonth}}" } } } }
内容的提问来源于stack exchange,提问作者Peter Stampfli
相关产品推荐
相关产品推荐

