首页 > 解决方案 > MongoDb 查询:基于日期间隔中的所有日期和附加条件

问题描述

我的 mongodb 集合看起来像这样。基本上对于每个 product_id,都有多个文档来存储不同日期的可用性。

{
"_id" : ObjectId("5bf22a773d3999bca17d4a3d"),
"timestamp" : ISODate("2018-12-30T18:30:00.000Z"),
"product_id" : "1",
"available" : true
}
{
"_id" : ObjectId("5bf22a773d3999bca17d4a3d"),
"timestamp" : ISODate("2018-12-31T18:30:00.000Z"),
"product_id" : "1",
"available" : true
}

我应该如何查询,以便给定日期间隔可用性对于该间隔中的所有日期都是正确的。

示例:日期间隔:30-12-2018 到 31-12-2018 AND avalability: true 在这种情况下应该返回 2 个文档,因为可用性在这两个日期都是 true。请帮忙。

标签: mongodbmongodb-query

解决方案


您可以执行以下操作,返回所有可用性为 true 的查询,然后使用该数组检查使用 .filter 过滤日期,因此您感兴趣的日期介于参数 date1 < dateYouWant < date2 之间。

然后返回包含您感兴趣的日期的数组。

这两个链接将对您有所帮助。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array /筛选

您还可以做的是filter({})在查询中使用 and 来搜索语句$gt(大于)和$lt(小于),您会输入如下内容:

`filter({ $and[{ date: {$gt: minimumDate }, {$lt: maximumDate}, {avaliability: true}] })`

和: https ://docs.mongodb.com/manual/reference/operator/query/and/

gt:https ://docs.mongodb.com/manual/reference/operator/query/gt/

lt:https ://docs.mongodb.com/manual/reference/operator/query/lt/

and运算符确保您获得满足这两个条件的对象

希望能帮助到你!


推荐阅读