Javascript 矩将日期转换为查找查询的字符串和聚合查询的对象。如何及;为什么?

Javascript 矩将日期转换为查找查询的字符串和聚合查询的对象。如何及;为什么?,javascript,mongodb,mongoose,mongodb-query,momentjs,Javascript,Mongodb,Mongoose,Mongodb Query,Momentjs,当我使用find查询时,它将日期作为对象返回,而使用aggregate时,它在使用矩转换后将日期作为字符串返回。为什么? 查找查询 this.find({},{ "updated_at":1, "created_at":1, },callback); 聚合查询 this.aggregate([{ $project:{ "updated_at" :1, "created_at" :1, } }],callback); 现在,当我使

当我使用find查询时,它将日期作为对象返回,而使用aggregate时,它在使用转换后将日期作为字符串返回。为什么?

查找查询

this.find({},{
    "updated_at":1,
    "created_at":1,
},callback);
聚合查询

this.aggregate([{
    $project:{
        "updated_at" :1,
        "created_at" :1,
    }
}],callback);
现在,当我使用moment将日期转换为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

我不明白为什么会这样?有人能解释一下吗?

format
方法返回字符串。使用
格式时
要向用户显示,并且是显示功能

这是因为
find
将其结果提供为Mongoose文档实例(不能自由修改),而
aggregate
将其结果提供为普通对象(可以修改)

因此,如果您想修改
查找
结果中的
处创建的字段,请告诉Mongoose提供普通对象,方法是将调用链接到:


这不是我问题的答案:/@shubhamsaini如何测试它是字符串还是对象?在你的样本中你没有解释,所以对不起!!我已经编辑了最后一行代码。请现在检查。@shubhamsaini在这一行
dataArray[0]。created_at=created_at_est.format('ddd MMM DD YYYY HH:mm:ss')您将其设置为字符串
format
方法返回string如果我按照您的方法执行,那么在这两种情况下它都应该给出string,但事实并非如此。只有当我使用聚合查询时,它才会给出字符串。该死的信息。只有你能做到。非常感谢:)
this.find({},{
    "updated_at":1,
    "created_at":1,
}).lean().exec(callback);