我的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。 请帮忙。
答案 0 :(得分:0)
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
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 您还可以做的是使用 和:
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/ 和运算符可确保您获得满足两个条件的对象 希望有帮助!filter({})
,并在查询中搜索语句$gt
(大于)和$lt
(小于),您将输入如下内容:`filter({ $and[{ date: {$gt: minimumDate }, {$lt: maximumDate}, {avaliability: true}] })`