Найти данные между датами в mongodb? - PullRequest
0 голосов
/ 30 мая 2018

Я хочу получить все записи, которые были изменены за последние 10 дней.В базе данных у меня есть столбец LastModifiedDate.Исходя из этого, я хочу написать фильтр запроса в MongoDB.Ниже приведен формат коллекции Owner:

[
  {
    "_id": ObjectId("5b0ca634806bebc3584d9dc2"),
    "ownerKey": "WEST PIONEER LLC, ID",
    "isCorporation": true,
    "corpName": "WEST PIONEER LLC",
    "propertyMailingAddress": {
      "poBox": "",
      "street": "250 S 5TH ST",
      "house": "",
      "apartment": "2",
      "city": "BOISE",
      "state": "ID",
      "zip": "83702",
      "type": "UNKNOWN",
      "sources": [
        "SNL"
      ]
    },
    "contacts": [],
    "createDate": {
      "year": 2018,
      "month": 5,
      "day": 28
    },
    "history": [],
    "sources": [
      "SNL"
    ],
    "lastModifiedDate": "2018-05-29T01:00:36.533Z"
  }
]

Я запрашиваю данные, используя следующий запрос:

 db.collection.aggregate([
  {
    $project: {
      date: {
        $dateFromString: {
          dateString: "$lastModifiedDate"
        }
      }
    }
  },
  {
    $match: {
      date: {
        $gte: new Date((new Date().getTime()-(10*24*60*60*1000)))
      }
    }
  }
])

Но это не фильтр запроса.Я нашел способ с запросом агрегации, вместо этого я хочу запрос фильтра, который я могу выполнить в Mongo Compass.

1 Ответ

0 голосов
/ 31 мая 2018

В упомянутом выше документе коллекции lastModifiedDate является строкой.Это должно быть преобразовано в объект ISODate прежде, чем быть вычтенным.Должен работать приведенный ниже запрос.

db.owners.aggregate([{$project:{"_id":1,"cdate":{$dateFromString:{"dateString":"$lastModifiedDate"}}}},{$project:{"_id":1,diff_msecs:{$subtract:[new ISODate(),"$cdate"]}}},{$project:{"_id":1,diff_days:{$divide:["$diff_msecs",1000*60*60*24]}}},{$match:{"diff_days":{"$lte":10}}}])

Первоначальная проекция преобразует lastModifiedDate из строки в IsoDate.Второй проект выполняет вычитание из текущей даты с последующим преобразованием из миллисекунд в дни и, наконец, сравнение, если результат меньше чем равен 10.

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