我正在尝试将一个新的日期值构建到一个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.currentTimeMillis
或java.util.Date.getTime
方法中获取。所以,我想你想要的是:
Project( ("exampleDate", BSONDateTime(System.currentTimeMillis()) )
或
val now = new java.util.Date()
Project( ("exampleDate", BSONDateTime(now.getTime) )