Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 当按去年创建的文档计数时,Mongoose.countDocuments不起作用_Node.js_Mongodb_Mongoose_Graphql_Apollo - Fatal编程技术网

Node.js 当按去年创建的文档计数时,Mongoose.countDocuments不起作用

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, }, }, 函数错误,计

我正在开发一个名为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.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"),