我们有meteor app,我们使用mongodb作为数据库。现在,由于在mongodb上已经可以使用VIEW功能,我们尝试使用它来生成报告。但是,我们在收集日期字段和当前日期时遇到问题,我们甚至无法使用$ project下的mongodb聚合检索当前日期字段,因为我们不知道获取当前日期的正确语法。我们的目标是,因为它正在使用视图,我们希望将新的Date()(以下代码中的今天的日期)替换为mongodb的当前日期方法。
"waiting_for_appointment" : {
$cond : {
if: { $eq: ["$current_status", "Waiting For Appointment"]},
then: {
$cond : {
if: {$gt: [{$subtract: [ new Date(), "$statuses.waiting_for_appointment.from_date" ]}, 0]},
then: {
$cond: {
if: {$gt: [{$subtract: [ "$statuses.waiting_for_appointment.to_date", "$statuses.waiting_for_appointment.from_date" ]}, 0]},
then: {$multiply : [{
$divide: [{$subtract: [ new Date(), "$statuses.waiting_for_appointment.from_date" ]}, {$subtract: [ "$statuses.waiting_for_appointment.to_date", "$statuses.waiting_for_appointment.from_date" ]}]
}, 100]
},
else: 0
}
},
else: 0
}
},
else: -1
}
},
查询工作正常但是当我再次编辑VIEW查询时,我发现它被转换为静态日期,即保存查询的日期。这是保存查询并将其编辑回来后得到的结果。
ISODate("2017-10-09T02:12:42.282+0000")
这就是为什么,如果更改日期,查询将无效。
提前致谢。
答案 0 :(得分:0)
通常,当您设置对象文字(在这种情况下您正在使用整个查询)时,对象中的所有被调用函数都会在实例化对象时被调用。
注意:我没有完成您的复杂查询。我真的只是在谈论更新日期的问题,并假设查询结构合理。
我不知道你的用例,但如果你可以将它作为一个函数而不是一个对象来调用,那么你可以很容易地在调用时获得更新的参数。
const someObj = {
"waiting_for_appointment" : function( currentDate ) {
$cond : {
if: { $eq: ["$current_status", "Waiting For Appointment"]},
then: {
$cond : {
if: {$gt: [{$subtract: [ currentDate, "$statuses.waiting_for_appointment.from_date" ]}, 0]},
then: {
$cond: {
if: {$gt: [{$subtract: [ "$statuses.waiting_for_appointment.to_date", "$statuses.waiting_for_appointment.from_date" ]}, 0]},
then: {$multiply : [{
$divide: [{$subtract: [ currentDate, "$statuses.waiting_for_appointment.from_date" ]}, {$subtract: [ "$statuses.waiting_for_appointment.to_date", "$statuses.waiting_for_appointment.from_date" ]}]
}, 100]
},
else: 0
}
},
else: 0
}
},
else: -1
}
},
}
然后someObj['waiting_for_appointment'](new Date())
将返回具有当前日期时间的查询对象。
答案 1 :(得分:0)
从 MongoDB 4.2 开始,您现在可以使用变量 $$NOW。
https://docs.mongodb.com/manual/reference/operator/update/currentDate/
{
current_date: '$$NOW'
}
如果您想在视图内的聚合中使用它,您也可以将它与 $addFields 结合使用。例如:
[
{
$addFields: {
current_date: '$$NOW'
}
},
{
$project: {
differenceMilli: {
$subtract: [
'$current_date',
'$updated_at'
]
}
}
]