我想将日期字段与日期范围进行比较。 这是我的原始代码:
let results=Show.find({_MovieId: paramMovieId, date : {$in : dateRange}},{});
但我想通过一个小的操作来比较日期字段。像这样的东西:
let results=Show.find({_MovieId: paramMovieId, moment(date).add(1,'d').format('YYYY-MM-DD'): {$in : dateRange}},{});
我似乎无法运行此代码,这似乎是一项不可能完成的任务。
有人知道有没有办法改变我在 find() 函数中比较的字段的值?
谢谢
最佳答案
与 $expr
运算符,您可以构建查询表达式,该表达式允许您操作日期字段并将其与某些表达式列表进行比较。
在以下示例中, $expr
与 conditional statement 一起使用例如$setIsSubset
将转换后的日期字段 ( a day added ) 与 find()
方法中的 dateRange 数组进行比较
db.show.find({
'$expr': {
'$setIsSubset': [
[ { '$dateToString': {
'format': '%Y-%m-%d',
'date': { '$add': [ '$date', 24*60*60000 ] }
} } ],
dateRange
]
}
})
与 $dateToString
您可以指定另一个名为 timezone
的选项,它设置操作结果的时区,例如津巴布韦哈拉雷本地时区
{ '$dateToString': {
'date': '$date',
'format': '%Y-%m-%d',
'timezone': 'Africa/Harare'
} }
使用Olson Timezone Identifier格式为操作的时区和
{ '$dateToString': {
'date': '$date',
'format': '%Y-%m-%d',
'timezone': '+02'
} }
使用UTC offset指定时区的格式。
关于javascript - 有没有办法改变我在 find() 函数中比较的字段的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51466355/