MongoDB $addFields,根据条件添加布尔字段
Posted
技术标签:
【中文标题】MongoDB $addFields,根据条件添加布尔字段【英文标题】:MongoDB $addFields, add boolean field based on condition 【发布时间】:2020-12-15 06:41:23 【问题描述】:我有一个包含开放时间的地点文件列表,详细信息如下:
"openingTimes":
"Wednesday": [ // array of shifts
"startTime": "hour": 1, "minute": 0 , // shift starts
"endTime": "hour": 10, "minute": 0 //shift ends
,
"startTime": "hour": 15, "minute": 0 ,
"endTime": "hour": 23, "minute": 59
],
"Thursday": [
"startTime": "hour": 0, "minute": 0 ,
"endTime": "hour": 23, "minute": 59
],
我需要添加一个字段来指示该地点现在是否开放,
$addFields:
isOpenNow:
$and: [
$or: [
$lt: ['$openingTimes.Wednesday.startTime.hour', 14]
,
$and: [
$lte: ['$openingTimes.Wednesday.startTime.hour', 14]
,
$lte: ['$openingTimes.Wednesday.startTime.minute', 0]
]
]
,
$or: [
$gt: ['$openingTimes.Wednesday.endTime.hour', 14]
,
$and: [
$gte: ['$openingTimes.Wednesday.endTime.hour', 14]
,
$gte: ['$openingTimes.Wednesday.endTime.minute', 0]
]
]
]
但最终结果为 false 我认为 $gte: ['$openingTimes.Wednesday.endTime.hour', 14]
将小时数数组与 14 进行比较,是否有办法根据其轮班指示该地点是否开放。
【问题讨论】:
数据似乎表明它在周三 14:00 关闭。有班次10:00结束,下一班15:00开始。 【参考方案1】:您可以尝试以下聚合:
isPlaceOPen:
$cond:
if: $gt: [ $size:
$filter:
input: '$openingTimes.Wednesday',
as: 'shift',
cond:
$and: [
$or: [
$lt: [
'$$shift.startTime.hour',
14
]
,
$and: [
$lte: [
'$$shift.startTime.hour',
14
]
,
$lte: [
'$$shift.startTime.minute',
0
]
]
]
,
$or: [
$gt: [
'$$shift.endTime.hour',
14
]
,
$and: [
$gte: [
'$$shift.endTime.hour',
14
]
,
$gte: [
'$$shift.endTime.minute',
0
]
]
]
]
, 0] ,
then: true,
else: false,
,
【讨论】:
以上是关于MongoDB $addFields,根据条件添加布尔字段的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB $addFields 使用 org.springframework.data.mongodb.core.MongoTemplate