mongo-转换一个字段的字段值以在投影期间创建日期时间

时间:2015-04-21 06:35:19

标签: mongodb datetime aggregation-framework

我正在使用mongodb agreegate框架,这就是我的普通对象的样子

{
    "_id" : "6b109972c9bd9d16a09b70b96686f691bfe2f9b6",
     "history" : [ 
        {
            "dtEntry" : 1428929906,
            "type" : "I",
            "refname" : "ref1"
        }, 
        {
            "dtEntry" : 1429082064,
            "type" : "U",
            "refname" : "ref1"
        }
    ],
    "c" : "SomeVal",
    "p" : "anotherVal"
}

这里history.dtEntry是一个纪元价值(请不要建议我在进入这里之前将其改为isodate,它超出了我的范围)。 我想将c,p。history.type和history.dtEntry投影为(星期几)。

db.mydataset.aggregate({$project:{c:1,p:1,type:"$history.type",DtEntry:"$history.dtEntry",dater:{$dayOfMonth:new Date(DtEntry)}}})

如果我直接使用任何纪元价值,那么月份出来就好了,但我必须传递dtEntry的值,这两种方式似乎都不适合我 我试过了

$dayOfMonth:new Date(DtEntry)
$dayOfMonth:new Date(history.DtEntry)
$dayOfMonth:new Date("history.DtEntry")
$dayOfMonth:new Date("$history.DtEntry")

1 个答案:

答案 0 :(得分:2)

我发现其他一些方法可能对您有所帮助,请查看以下聚合查询

db.collectionName.aggregate({
"$unwind": "$history"
}, {
"$project": {
    "c": 1,
    "p": 1,
    "type": "$history.type",
    "dater": {
        "$dayOfMonth": {
            "$add": [new Date(0), {
                "$multiply": ["$history.dtEntry", 1000]
            }]
        }
    }
}
})