mongo db: используйте $gte и $lte, чтобы найти строковые даты, введя только годы

У меня есть объект, который выглядит так:

name:"Aachen"
mass:"21"
year:"1880-01-01T00:00:00.000"

Я пытаюсь использовать $gte и $lte, чтобы найти записи, которые произошли между определенными ГОДАМИ.

Я пробовал это: db.collectionName.find({$expr: {$and: [{"year": {$gte:"1880"}}, {"year": {$lte: "1900"}} ]}})

но не получая никаких результатов

Я думаю, мне нужно сначала проанализировать дату в ISODate, а затем деструктурировать год, но я не совсем уверен, как выполнить запрос.

Любое руководство?

Большое спасибо


person elisa    schedule 16.01.2021    source источник
comment
Вы не должны хранить значения даты в виде строк, храните значения даты напрямую.   -  person Wernfried Domscheit    schedule 17.01.2021


Ответы (1)


Вы не можете просто запросить год из строки. Вы должны преобразовать поле в дату и получить из него год. Я бы предложил использовать для этого структуру агрегации следующим образом:

db.collectionName.aggregate([
    {
        $addFields: {
            justYear: {
                $year: {
                    $dateFromString: {
                        dateString: '$year',
                    },
                },
            },
        },
    },
    {
        $match: {
            justYear: {
                $gte: 1880,
                $lte: 1900,
            },
        },
    },
]);

Что-нибудь еще дайте мне знать

person luckongas    schedule 16.01.2021