我正在尝试编写一个相当复杂的MongoDB查询,该查询返回仅针对未来事件过滤的一组结果(事件)。
不幸的是,这些事件的数据模式有些令人沮丧。用户可以设置一个具有特定结束日期的事件(可以使用此功能),也可以选择在特定日期结束的重复发生(也可以)。
但是,他们还可以选择该事件的选项,使其每隔X天/周/月重复一次(有一个类型字段,可以选择其中的哪一个),以进行总计Y次重复。因此,如果要计算有效的结束日期,则需要在查询中使用所有这三个变量。
我正在努力处理MongoDB查询中的日期的语法,使用数据库中的数据来构造新的日期对象...
这是我到目前为止构造的条件,我正在尝试完成包含/ * * /注释的3行。
如果有人知道这样做的方法,我将非常感谢您的帮助。谢谢!
$or: [
{ 'when.endingDate': { $gte: new Date() } },
{ 'when.recurring.forever': { $eq: true } },
{ 'when.multipleDays': { $eq: true } },
{
$and: [
{ 'when.recurring.occurences': { $gte: 1 } },
{ $or: [
{ $and: [
{ 'when.recurring.type': { $eq: 'day' } },
{ /* when.endingDate + when.recurring.occurences * when.recurring.every * days >= new Date() */ }
] },
{
$and: [
{ 'when.recurring.type': { $eq: 'week' } },
{ /* when.endingDate + when.recurring.occurences * when.recurring.every * week >= new Date() */ }
]
},
{
$and: [
{ 'when.recurring.type': { $eq: 'month' } },
{ /* when.endingDate + when.recurring.occurences X when.recurring.every * month >= new Date() */ }
]
}
] }
]
},
{ $and: [
{ 'when.repeat': { $eq: true } },
{ 'when.recurring.until': { $gte: new Date() } }
] }
]
答案 0 :(得分:0)
您正在尝试将大量业务逻辑塞入mongodb查询中。
我将选择以下方法之一: