Node.js 当按去年创建的文档计数时,Mongoose.countDocuments不起作用
我正在开发一个名为wertik js的开源库,它使用Graphql,我添加了报告类型的帮助程序,可以返回基于在创建时创建的mongoose模型的计数。在这种情况下,我有一些报告,比如,去年的总计数、去年增加的总计数、今天增加的总计数等,今天我以这种方式过滤:Node.js 当按去年创建的文档计数时,Mongoose.countDocuments不起作用,node.js,mongodb,mongoose,graphql,apollo,Node.js,Mongodb,Mongoose,Graphql,Apollo,我正在开发一个名为wertik js的开源库,它使用Graphql,我添加了报告类型的帮助程序,可以返回基于在创建时创建的mongoose模型的计数。在这种情况下,我有一些报告,比如,去年的总计数、去年增加的总计数、今天增加的总计数等,今天我以这种方式过滤: $lt: moment().subtract(1, "year").endOf("year"), 示范文件 { 创建于:{ $gt:moment.startOfday, $lt:moment.endOfday, }, }, 函数错误,计
$lt: moment().subtract(1, "year").endOf("year"),
示范文件
{
创建于:{
$gt:moment.startOfday,
$lt:moment.endOfday,
},
},
函数错误,计数{
分解计数;
}
;
它工作得很好。使用“去年”时,我有去年创建的数据。去年是这样算的
$lt: moment().subtract(1, "year").endOf("year"),
示范文件
{
创建于:{
$gt:moment.1,year.startOfyear,
$lt:moment.subtract1,year.endOfyear,
},
},
函数错误,计数{
分解计数;
}
;
但去年的计数不起作用,每次它都返回0,但我确信我用正确的方式编写了查询,它返回了错误的数字,即0。total_添加的_今天返回罚款
$lt: moment().subtract(1, "year").endOf("year"),
要复制错误,您可以拉动此分支并执行以下操作:
$lt: moment().subtract(1, "year").endOf("year"),
安装软件包并运行服务器sudo-thread&&sudo-thread-dev
去
并执行graphql查询:
你将能够重现错误
$lt: moment().subtract(1, "year").endOf("year"),
您可以从第110行mongoose开始检查此文件
$lt: moment().subtract(1, "year").endOf("year"),
我做错了什么
$lt: moment().subtract(1, "year").endOf("year"),
任何帮助都将被视为对这个开源项目的贡献
$lt: moment().subtract(1, "year").endOf("year"),
编辑
$lt: moment().subtract(1, "year").endOf("year"),
我正在搜索的示例文档:
{
"_id": {
"$oid": "5ed85b8893280c021c2ddfd6"
},
"name": "John",
"created_at": "Thu Jun 04 2019 07:25:12 GMT+0500 (Pakistan Standard Time)",
"updated_at": "Thu Jun 04 2019 07:25:12 GMT+0500 (Pakistan Standard Time)",
"__v": 0
}
$lt: moment().subtract(1, "year").endOf("year"),
我认为问题出在这方面
$lt: moment().subtract(1, "year").endOf("year"),
应该是
$lt: moment().subtract(1, "year").endOf("year"),
$lt: moment().endOf("year"),
问题是文档中创建的_at字段包含一个字符串:Thu Jun 04 2019 07:25:12 GMT+0500巴基斯坦标准时间
$lt: moment().subtract(1, "year").endOf("year"),
这不能按日期时间排序,也不能与任何日期范围运算符匹配
$lt: moment().subtract(1, "year").endOf("year"),
您可以尝试使用聚合或更新将这些日期转换为日期:
$lt: moment().subtract(1, "year").endOf("year"),
db.collection.update({created_at: {$type: "string"}},
[{$set: {created_at: {$toDate: {"$created_at"}}],
{multi:true})
然后,您将能够有意义地执行$gt或$lt测试。您认为问题出在减法1,为什么?我一年前刚刚去获取去年创建的文档的数量。我完全不打算进行回购和构建,但是如果您将示例文档编辑到您认为查询应该找到的问题中,我们可能能够发现问题。请尝试使用中的那些矩对象使用.toDatecondition@Joe已经试过了,但没用。添加了一个示例文档。我们可以在架构中设置它吗?如果您将架构设置为使用日期类型而不是字符串,则我使用的是Mongoosei,这应该可以为新文档解决此问题。如果您需要更新现有文档,从mongo shell运行一次性更新可能是最简单的。这不是关于旧帖子的问题,我只是测试库报告,以便数据是虚拟的。一个问题,我使用了Date.now毫秒。MongoDB查询运算符是类型敏感的,如果将日期存储为毫秒,则使用毫秒查询;如果将日期存储为日期对象,则使用日期对象查询。
$lt: moment().subtract(1, "year").endOf("year"),