WedX - журнал о программировании и компьютерных науках

Функция поиска MongoDB с датой

{
    "_id" : ObjectId("604ddfa77971df6a5fefa6a7"),
    "Date" : "03/07/2017",
    "Region_code" : "",
    "Org_code" : "",
    "Org_Name" : "",
    "Contract_code" : "111AD8",
    "Contract_name" : "East London and City 111AD8",
    "5_3" : 418
}

Вот такой у меня документ. Мне нужно ограничить мою функцию find() одним месяцем (например, только январь 2020 г.). Поэтому я попытался использовать функцию $regex (план состоит в том, чтобы в основном использовать аналогичную команду, как в SQL):

MongoDB Enterprise > db.calls2020.find({"Date":{$regex:/01/01/2020/m}}).pretty()

or

db.calls2020.find({Date: /"01/01/2020"/m}).pretty()

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

uncaught exception: SyntaxError: missing } after property list :
@(shell):1:38

Я считаю, что, поскольку поле, которое я ищу, уже имеет символ /, это создает здесь проблему. Как я могу обойти это? Я уже пытался поместить дату в скобки (),{}; но все еще не работает.

Спасибо за помощь.

p.s.
Я абсолютный новичок в любой системе управления базами данных или кодировании в целом, поэтому, пожалуйста, простите мое невежество.

16.03.2021

  • Почему вы сохраняете дату в виде простого текста? Вам лучше подумать об изменении типа данных этого поля. Писать регулярное выражение для всех подобных операций неудобно. Кроме того, вам может понадобиться учитывать часовой пояс и т. д. Время важно :) удачи 16.03.2021
  • Вы не должны никогда хранить значения даты/времени в виде строки, это недостаток дизайна. Всегда сохраняйте правильный объект Date. 16.03.2021
  • @WernfriedDomscheit Вот каким был набор данных. Мог ли я что-нибудь сделать, чтобы изменить способ хранения поля при импорте набора данных? 18.03.2021
  • Как вы импортируете данные в свою MongoDB? 18.03.2021
  • @WernfriedDomscheit Я храню CSV-файл в папке bin, затем запускаю: mongoimport -d dbname -c colname -- type format --file filename.format --headerline 18.03.2021
  • Попробуйте определить формат даты с помощью --columnsHaveTypes вариант. 18.03.2021

Ответы:


1

/ — это специальный символ для регулярного выражения. Вы должны экранировать специальные символы. В вашем случае найти записи за январь 2020 -› /[0-9]{2}\/01\/2020/

Example dataset
MongoDB Enterprise rs0:PRIMARY> db.test.find().pretty()
{
        "_id" : ObjectId("604ddfa77971df6a5fefa6a7"),
        "Date" : "03/07/2017",
        "Region_code" : "",
        "Org_code" : "",
        "Org_Name" : "",
        "Contract_code" : "111AD8",
        "Contract_name" : "East London and City 111AD8",
        "5_3" : 418
}
{
        "_id" : ObjectId("304ddfa77971df6a5fefa6a7"),
        "Date" : "01/01/2020",
        "Region_code" : "",
        "Org_code" : "",
        "Org_Name" : "",
        "Contract_code" : "111AD8",
        "Contract_name" : "East London and City 111AD8",
        "5_3" : 418
}
{
        "_id" : ObjectId("804ddfa77971df6a5fefa6a7"),
        "Date" : "02/01/2020",
        "Region_code" : "",
        "Org_code" : "",
        "Org_Name" : "",
        "Contract_code" : "111AD8",
        "Contract_name" : "East London and City 111AD8",
        "5_3" : 418
}



Selecting Jan 2020 by regex

MongoDB Enterprise rs0:PRIMARY> db.test.find({"Date": { $regex: /[0-9]{2}\/01\/2020/}}).pretty()
{
        "_id" : ObjectId("304ddfa77971df6a5fefa6a7"),
        "Date" : "01/01/2020",
        "Region_code" : "",
        "Org_code" : "",
        "Org_Name" : "",
        "Contract_code" : "111AD8",
        "Contract_name" : "East London and City 111AD8",
        "5_3" : 418
}
{
        "_id" : ObjectId("804ddfa77971df6a5fefa6a7"),
        "Date" : "02/01/2020",
        "Region_code" : "",
        "Org_code" : "",
        "Org_Name" : "",
        "Contract_code" : "111AD8",
        "Contract_name" : "East London and City 111AD8",
        "5_3" : 418
}
16.03.2021


3

Использование строки для значений даты обычно является плохим решением. Я бы предложил такое решение:

db.calls2020.aggregate([
   {
      $set: {
         date_parts: {
            $dateToParts: {
               date: { $dateFromString: { dateString: "$Date", format: "%d/%m/%Y" } }
            }
         }
      }
   },
   { $match: { "date_parts.year": 2017, "date_parts.month": 7 } }
])
16.03.2021
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: [email protected]