node.js - 有没有办法使用聚合从 Mongoose 的 ObjectId 获取日期?

标签 node.js mongodb mongoose mongodb-query

我有Users集合。 设备都在对象数组中。

[{
    "_id" : ObjectId("5c66a979e109fe0f537c7e37"),
    "devices": [{
            "dev_token" : "XXXX",
            "_id" : ObjectId("5ccc0fa5f7778412173d22bf")
        }]

},{
    "_id" : ObjectId("5c66b6382b18fc4ff0276dcc"),
    "devices": [{
            "dev_token" : "XXXX",
            "_id" : ObjectId("5c93316cc33c622bdcfaa4be")
        }]

}]

我需要在devices中添加新字段date来查询文档,例如

"devices": [{
       "dev_token" : "XXXX",
        "_id" : ObjectId("5c93316cc33c622bdcfaa4be"),
       "date": ISODate("2012-10-15T21:26:17Z")
}]
来自 devices._id.getTimestamp() 的

date

我尝试使用聚合这个,不知道如何使用getTimestamp()

db.getCollection('users').aggregate([ {
    "$unwind": "$devices"
}, {
    "$group": {
        "_id": "$_id",
        "devices": {
                "$push": "$devices._id.getTimestamp()"
          }
     }
}])

我使用$devices._id.getTimestamp(),这可能是错误..这是我如何处理这个问题..感谢您的帮助

最佳答案

您可以使用$toDate从 _id 字段获取时间戳。

unwind 阶段之后将 date 字段添加到每个 devices 元素,使用 $addFields

试试这个:

db.getCollection('users').aggregate([ {
    "$unwind": "$devices"
},{
    $addFields : {
        "devices.date": { $toDate: "$_id" }
    }
}, {
    "$group": {
        "_id": "$_id",
        "devices": {
                "$push": "$devices"
          }
     }
}])

您可以通过Mongo Playground查看结果(只需按“运行”)

关于node.js - 有没有办法使用聚合从 Mongoose 的 ObjectId 获取日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57220561/

相关文章:

javascript - 自动填充 HTML 字段 - 使用 NodeJs 和 mySQL

c# - 在 Mongo C# 中,分组时,如何创建包含全部内容的组列表?

mongodb - 如何在 Mongoose 中进行范围查询?

javascript - 检查对象是否为空且具有未定义的属性

javascript - 如何将脚本存储在字符串中?

mongodb - 仅检索 MongoDB 集合中对象数组中的查询元素

mongodb - 不在带有 $expr 的文档字段数组 mongodb 中

javascript - Mongoose .populate() 未填充

node.js - Mongodb 用不同的值更新多个文档

javascript - 如何将图像从url加载到nodejs的缓冲区中