Запрос MongoDb: На основе всех дат в интервале дат и дополнительных условий - PullRequest
0 голосов
/ 19 ноября 2018

Моя коллекция 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 И доступность: true в этом случае должно возвращать 2 документа, поскольку в обе эти даты имеется доступность true. Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Вы можете сделать следующее, вернуть все запросы, которые имеют доступность 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/

Операторы и гарантируют, что вы получите объекты, которые удовлетворяют обоим условиям

Надеюсь, это поможет!

0 голосов
/ 19 ноября 2018
  1. Без product_id

db.collection.find ({метка времени: {$ GTE: ISODate ( "2018-12-30T00: 00: 00.000Z"), $ Ге: ISODate ( "2018-12-31T23: 59: 59.000Z") }, доступно: true})

  1. С product_id

    db.collection.find ({метка времени: {$ GTE: ISODate ( "2018-12-30T00: 00: 00.000Z"), $ Ге: ISODate ( "2018-12-31T23: 59: 59.000Z") }, доступно: true, product_id: 1})

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...