【发布时间】:2015-03-25 17:19:45
【问题描述】:
我正在使用 node.js mongodb 客户端。 我在一个集合中有一个时间戳值,现在我想使用聚合将时间戳转换为 IOSDate,所以我可以很容易地比较它。但我不知道该怎么做。
var db = game.getDB();
var coll = db.collection("LoginRecord");
coll.aggregate([
{
$project: {
"PT" : 1,
"PID" : 1,
"regDate" : new Date("$createTime"), //#####createTime is a timestamp, I want to convert it to IOSDate
"loginDay" : { $dayOfYear : "$_serverDate"}
}
},
{
$group : {
"_id" : "$loginDay",
"logUsers" : { $addToSet: "$PID"}
}
},
{
$unwind : "$logUsers"
},
{
"$group" : {
"_id" : "$_id",
"logCount" : { $sum: 1}
}
}
], function(err, res) {
logger.info("aggregate res " + JSON.stringify(res));
});
【问题讨论】:
-
你不能那样做。您正在使用的 JavaScript 函数在管道内容发送到服务器的“外部”和“之前”进行评估。在管道执行期间,您不能在元素上使用任意代码。您将需要使用时间戳值来确定“dayOfYear”(非常复杂,我“相当”确定聚合框架没有必要的数学运算符来处理它)。或者以其他方式将您的集合转换为使用 Date 类型。但是你不能在管道执行中使用这种方式。
-
如果我的 mongodb 客户端是 c++,我如何制作一个有时间值的 json 值,当 json 发送到 mongodb 时,日期值会自动保存为 ISODate 值?我怎样才能完成它?
-
驱动程序库将有一个日期对象类型。如果您不确定如何使用它,请发布另一个问题。根据我的解释,您在这里尝试做的事情是不可能的。
-
好的,非常感谢!
标签: mongodb mongodb-query aggregation-framework