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(),这可能是错误..这是我如何处理这个问题..提前感谢
您可以使用$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查看结果(只需按“运行”)