我只是想计算一些文档。当使用其他参数,如“type”:“someType”,我得到正确的计数。但当我使用{"createdAt": {"$gte": "", "$lte": ""}}
(与实际日期是JS日期对象)我得到0作为计数。一直在这几天,我似乎找不到解决方案...
我试着把范围缩小到尽可能小的可复制范围。像这样:
const query = {
createdAt: {"$gte": new Date("2023-11-01"), "$lte": new Date("2023-11-30")},
}
const result = await Entity.countDocuments(query)
字符串
这将返回0,即使我100%知道我有文档匹配标准,例如“createdAt”:'2023-11- 06 T08:09:07.000Z'。
使用其他参数尝试相同的countDocuments()函数返回正确的数字,例如:
const query = {
tags: {"$nin":["false-positive", "out-of-scope"]},
}
const result = await Entity.countDocuments(query)
型
上面的代码将返回正确数量的文档,这些文档在其“tages”字段中没有这两个字符串。
我也试过使用“$and”操作符,如下所示:
const testQuery = {
$and: [{ createdAt: { $gte: new Date("2023-10-01") } }, { createdAt: { $lte: new Date("2023-11-31") } }],
}
型
但没有运气。
我还尝试了使用操作符注销查询,并将其粘贴到MongoExpress的“Advanced”-tab中。这将返回正确的文档,因此问题似乎与Mongoose或Node.js有关。
我不知道为什么它不工作与“$gte”和“$lte”,请帮助。
编辑:我发现了一个变通方法,但它不应该是必需的。为了使它工作,我必须对集合本身执行完全相同的查询,而不是使用DB模型“Entity”:
const colletion = mongooseConnection.collection("colecctionName")
const result = await colletion.countDocuments({ createdAt: { $gte: "2023-10-01", $lte: "2023-11-31" } })
型
这给了我正确的计数,但我不明白为什么它不应该与DB模型本身一起工作。
编辑2:通过使用new Date().toISOString().split("T")[0]
使它工作得足够好,所以我们只得到YYYY-MM-DD格式。这沿着直接查询集合,而不是使用DB模型,允许我在日期之间提取数据。
尽管如此,问题仍然存在。Mongoose应该处理JS日期对象,并且似乎过于有限,我们不能指定日期超过一天。
1条答案
按热度按时间qf9go6mv1#
你可以用这个方法,我是这样处理的
字符串