如何获取 mongo shell 中最近三个月创建的所有文档
How to get all documents which are created in last three months in mongo shell
我想找到最近三个月内(仅在 3 个月内,而不是更早的)创建的集合中的所有文档。
示例文档:
因为我认为它会更 reliable.But 如果你觉得这样很安全,你也可以指导我使用 ce
文档字段。
提前致谢
如果我正确理解您的问题,那么您选择的比较字段 (ce
) 包含自纪元以来 秒 的数量。如果是这样,那么您不能直接将其与 Javascript Date
值进行比较。
相反,您必须将 Javascript Date
对象的 time
值转换为秒数,然后与该值进行比较。
例如:
var threeMonthsAgo = new Date();
threeMonthsAgo.setMonth(threeMonthsAgo.getMonth() - 3);
var threeMonthsAgoInSeconds = threeMonthsAgo.getTime() / 1000
db.collection.find({
ce: { $gte: threeMonthsAgoInSeconds }
})
这种毫秒到秒的转换存在一些不准确,如果这种不准确是不可接受的,那么我认为解决方案是将 ce
存储为 毫秒 的数字纪元以来。
如果ce
存储了毫秒数,那么它可以直接与计算的“3个月前”Javascript日期的值进行比较。
但是,上面的示例 不需要 要求您将 ce
转换为毫秒。我要说的是,将秒值与从毫秒派生的计算值进行比较会引入一些最小的不准确性。这可能在您的用例中无关紧要,但如果确实如此,那么解决它的唯一方法就是比较同类与同类,即 millis 与 millis。
我想找到最近三个月内(仅在 3 个月内,而不是更早的)创建的集合中的所有文档。
示例文档:
因为我认为它会更 reliable.But 如果你觉得这样很安全,你也可以指导我使用 ce
文档字段。
提前致谢
如果我正确理解您的问题,那么您选择的比较字段 (ce
) 包含自纪元以来 秒 的数量。如果是这样,那么您不能直接将其与 Javascript Date
值进行比较。
相反,您必须将 Javascript Date
对象的 time
值转换为秒数,然后与该值进行比较。
例如:
var threeMonthsAgo = new Date();
threeMonthsAgo.setMonth(threeMonthsAgo.getMonth() - 3);
var threeMonthsAgoInSeconds = threeMonthsAgo.getTime() / 1000
db.collection.find({
ce: { $gte: threeMonthsAgoInSeconds }
})
这种毫秒到秒的转换存在一些不准确,如果这种不准确是不可接受的,那么我认为解决方案是将 ce
存储为 毫秒 的数字纪元以来。
如果ce
存储了毫秒数,那么它可以直接与计算的“3个月前”Javascript日期的值进行比较。
但是,上面的示例 不需要 要求您将 ce
转换为毫秒。我要说的是,将秒值与从毫秒派生的计算值进行比较会引入一些最小的不准确性。这可能在您的用例中无关紧要,但如果确实如此,那么解决它的唯一方法就是比较同类与同类,即 millis 与 millis。