有没有办法使用聚合从猫鼬的 ObjectId 获取日期?

krb*_*aji 6 mongoose mongodb node.js mongodb-query

我有Users收藏。devices都在对象数组中。

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

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

}]
Run Code Online (Sandbox Code Playgroud)

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

"devices": [{
       "dev_token" : "XXXX",
        "_id" : ObjectId("5c93316cc33c622bdcfaa4be"),
       "date": ISODate("2012-10-15T21:26:17Z")
}]
Run Code Online (Sandbox Code Playgroud)

date钥匙来自 devices._id.getTimestamp()

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

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

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

Rav*_*rti 4

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

使用$addFieldsdate将字段添加到阶段devices后的每个元素unwind

尝试这个 :

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

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