我正在尝试将一个新的日期值构建到一个reactivemongo聚合管道中的投影中。
我看到了其他一些例子,人们在mongo shell中创建了这个,比如:

db.runCommand({
    "aggregate" : "collectionName", "pipeline": [
       { $project: { exampleDate: new Date() } }
    ]
})

问题在于new Date()。对于reactiveMongo,投影将是一个项目对象:
Project( ("exampleDate", BSONValue) )

其中bsonvalue可以是bsonstring。但这会导致MongoDB忽略这样的字符串,因为结果是:
{ "aggregate" : "collectionName", "pipeline": [ { $project: { exampleDate: "new Date()" } } ] }

有没有办法在没有引号的情况下插入new Date()
附:我也试过使用BSONDateTime(0)
但这会导致:
{ $date: 0 }

这使得MongoDB抛出一个无效的$date运算符异常。

最佳答案

由于java.util.Date类的默认构造函数给出了调用构造函数的时间(也称为“now”),因此您似乎对使用相同的“now”时间构造BSONDateTime感兴趣。BSONDateTime的参数应该是一个Long值,它包含以毫秒为单位的UTC时间。您可以从java.lang.System.currentTimeMillisjava.util.Date.getTime方法中获取。所以,我想你想要的是:

Project( ("exampleDate", BSONDateTime(System.currentTimeMillis()) )


val now = new java.util.Date()
Project( ("exampleDate", BSONDateTime(now.getTime) )

10-05 22:19