MongoDb查询:基于日期间隔中的所有日期和其他条件

时间:2018-11-19 12:49:35

标签: mongodb mongodb-query

我的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可用性:在这种情况下,true将返回2个文档,因为这两个日期的可用性均为true。   请帮忙。

2 个答案:

答案 0 :(得分:0)

  1. 没有product_id

db.collection.find({timestamp:{$ gte:ISODate(“ 2018-12-30T00:00:00.000Z”),$ lte:ISODate(“ 2018-12-31T23:59:59.000Z”) },可用:true})

  1. 使用product_id

    db.collection.find({timestamp:{$ gte:ISODate(“ 2018-12-30T00:00:00.000Z”),$ lte:ISODate(“ 2018-12-31T23:59:59.000Z”) },可用:true,product_id:1})

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

答案 1 :(得分:0)

您可以执行以下操作,返回所有可用性为true的查询,然后使用该数组检查是否使用.filter过滤日期,以便将感兴趣的日期设置为参数date1

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

这两个链接将为您提供帮助。

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

您还可以做的是使用filter({}),并在查询中搜索语句$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/

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

希望有帮助!