Moment将date转换为查找查询的字符串和聚合查询的对象。怎么&为什么呢?

时间:2016-06-29 08:59:43

标签: javascript mongodb mongoose mongodb-query momentjs

当我使用查找查询时,它会将日期作为对象返回,而使用聚合时,会在使用时刻转换后将日期作为字符串。为什么呢?

查询

this.find({},{
    "updated_at":1,
    "created_at":1,
},callback);

汇总查询

this.aggregate([{
    $project:{
        "updated_at" :1,
        "created_at" :1,
    }
}],callback);

现在,当我使用时刻将日期转换为EST时,我得到以下结果

// lets say query result is in dataArray

var created_at = moment(dataArray[0].created_at);
var created_at_est = created_at.clone().tz("America/New_York");
dataArray[0].created_at = created_at_est.format('ddd MMM DD YYYY HH:mm:ss');
console.log(typeof(dataArray[0].created_at)); 
// result is string in aggregate query and object in find query

我无法理解为什么会这样?谁能解释一下呢?

2 个答案:

答案 0 :(得分:2)

因为NavigationController将其结果作为Mongoose文档实例(无法自由修改)提供,而find将其结果作为普通对象(可以)提供。< / p>

因此,如果您要修改aggregate结果中的created_at字段,请告知Mongoose通过链接lean()来提供普通对象:

find

答案 1 :(得分:0)

format方法返回字符串。当您使用format想要向用户显示并且是显示功能时。