【问题标题】:Project a new Date into aggregation pipeline using reactivemongo使用reactivemongo将新日期投影到聚合管道中
【发布时间】:2014-12-20 01:55:50
【问题描述】:

我正在尝试将一个新的 Date 值制作成 reactmongo 聚合管道中的投影。

我见过人们在 mongo shell 中创建它的其他示例,如下所示:

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

问题在于new Date()。使用 reactivemongo,投影将是一个 Project 对象:

Project( ("exampleDate", BSONValue) )

其中 BSONValue 可以是 BSONString。但这会导致 mongoDB 忽略此类字符串,因为结果将是:

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

有什么方法可以插入不带引号的new Date()

P.S.:我也试过使用BSONDateTime(0) 但这会导致:

{ $date: 0 }

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

【问题讨论】:

    标签: mongodb scala reactivemongo


    【解决方案1】:

    由于java.util.Date 类的默认构造函数给出了调用构造函数的时间(又名“现在”),看来您有兴趣用相同的“现在”时间构造BSONDateTimeBSONDateTime 的参数应该是包含 UTC 时间(以毫秒为单位)的 Long 值。您可以从java.lang.System.currentTimeMillisjava.util.Date.getTime 方法中获得它。所以,我想你想要的是:

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

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

    【讨论】:

    • 不幸的是,这不起作用,因为 mongo 抛出了一个无效的 $date 运算符异常。
    • 您需要共享生成此代码的确切代码以进行进一步诊断。你能把这个问题简化成一个小项目,然后放到 GitHub 上吗?如果是这样,我可能会找出问题所在。
    • @bILK 你找到解决方案了吗,在投影阶段添加 new Date()
    猜你喜欢
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 2014-03-28
    • 2020-08-31
    • 2017-01-04
    • 2010-10-26
    相关资源
    最近更新 更多