Запрос MongoDB на основе месяца и даты

Итак, у меня есть эти данные в моей БД,

[
  {
    "_id": ObjectId("5a934e000102030405000000"),
    "from": "1970-01-01",
    "to": "1970-01-05"
  },
  {
    "_id": ObjectId("5a934e000102030405000001"),
    "from": "2017-04-18",
    "to": "2017-04-23"
  },
  {
    "_id": ObjectId("5a934e000102030405000002"),
    "from": "2018-01-29",
    "to": "2018-01-30"
  },
  {
    "_id": ObjectId("5a934e000102030405000003"),
    "from": "2018-01-02",
    "to": "2018-01-08"
  }
]

Возможно ли, что я укажу год как 2018 г. и месяц как 01, тогда я получу совпадающие данные из всех данных? Вот как я получил два последних документа из коллекции.

Я попробовал запрос $ elemMatch:, но не получил ожидаемого результата.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
1 689
2

Ответы 2

Вы можете использовать регулярное выражение. Следующий пример с использованием мангуста:

model.find({
  from: {
     $regex: new RegExp('2018-01-', ''),
  },
});

Или

model.find({
  from: {
     $regex: /2018-01-/,
  },
});

Использование формата mongoshell:

db.collection.find({
  from: {
    $regex: "2018-01"
  }
})

https://mongoplayground.net/p/udRts-zp2D9

Могу ли я использовать регулярное выражение в mongoplayground? Я получаю сообщение об ошибке при использовании этого регулярного выражения

Harsh Patel 09.01.2019 12:12

Вы также можете попробовать следующее:

db.collection.find( 
    {"from": {"$gte": new Date(2018, 0, 1), "$lt": new Date(2018, 1, 1)}}
)

Также помните, что в функции Date () аргумент месяца начинает отсчет с 0, а не с 1.

Обновлять: MongoDB V3.4

db.collection.aggregate([
      {$project: {  "month" : {$month: '$date'}, "year" : {$year: '$date'}}},
      {$match: { month: 1, year: 2018}}
    ]);

это должен быть "$lt": new Date(2018, 1, 1)?

Steve Land 09.01.2019 12:15

Да .. обновлю ответ .. или может быть "$lte"

kRiZ 09.01.2019 12:48

Если вы используете $lte, вам нужно указать время 23:59:59 ... лучше используйте $lt и следующую дату.

Steve Land 09.01.2019 12:52

Думаю, вы правы. Я нашел новый ответ после того, как вы предложили.

kRiZ 09.01.2019 13:03

Другие вопросы по теме