Запрос MongoDB на основе месяца и даты - PullRequest
0 голосов
/ 09 января 2019

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

[
  {
    "_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: запрос, но не получил ожидаемого результата.

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Вы также можете попробовать ниже:

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

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

Обновление: MongoDB V3.4

db.collection.aggregate([
      {$project: {  "month" : {$month: '$date'}, "year" : {$year: '$date'}}},
      {$match: { month: 1, year: 2018}}
    ]);
0 голосов
/ 09 января 2019

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

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

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