我有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/