mon goose запрос регулярного выражения для игнорирования среднего символа - PullRequest
0 голосов
/ 10 марта 2020

Я работаю с mongodb, и мои данные хранятся как день: "3/6/2020" Я хочу запросить строку, которая соответствует день: "3/2020" без среднего значения или пропуска 6 в день: «3/6/2020» . например,

`myModel.find({"day": {$regex: "3/2020",  $options:" what option to pass here to ignore the `
` middle value"}});`
or any better way
 `model.find({"name": {$regex: search, $options:" regex options"}}, (err, users)=> {`
        `  res.status(200).send({users});`

"3/2020" для сопоставления любой записи с 3 и 2020 так же, как это "3/2020" соответствует "3/6/2020"

Ответы [ 3 ]

1 голос
/ 10 марта 2020

Полагаю, вы могли бы использовать структуру агрегации, чтобы преобразовать строковую дату в правильную дату, выбрать месяцы и годы и правильно сопоставить ее. Примерно так:

model.aggregate([{
    "$addFields": {
        "convertedDate": {
            "$toDate": "$myDate" // mydate is your field name which has string
        }
    }
}, {
    "$addFields": {
        "month": {
            "$month": "$convertedDate"
        },
        "year": {
            "$year": "$convertedDate"
        }
    }
}, {
    "$match": {
        "month": 3, // this is your search criteria
        "year": 2020 // // this is your search criteria
    }
}, {
    "$project": {
        "month": 0, // Do not take temp added fields month and year 
        "year": 0 // Do not take temp added fields month and year 
    }
}])

Это может выглядеть как большой запрос, но я думаю, что это гораздо лучше, чем делать строковое сопоставление с использованием регулярных выражений. Если ваше поле сохранено в формате даты, вы также можете удалить первый этап, на котором вы делаете $toDate. Надеюсь, это поможет

0 голосов
/ 12 марта 2020
Solved. i solved it  splitting my date as in my schema
```
    qDay :{
        type:Number, default: new Date().getDate(Date.now)
    },
    qMonth :{
        type:Number, default: new Date().getMonth(Date.now) + 1
    },
    qYear :{
        type:Number, default: new Date().getFullYear(Date.now)
    }```

my query


```const getByDay = async (req, res)=> {
    console.log(req.body);
    merchantModel.find({$and:[{qMonth : req.body.month}
        ,{qYear: req.body.year},{qDay:req.body.day}]}).then((record)=> {
        if(record.length == 0){
            res.status(404).send({msg:'no record!'});
        }else{
            co`enter code here`nsole.log(record);
            res.status(200).send({record:record});
        }
    });
}```
0 голосов
/ 10 марта 2020

Это может помочь вам. Мы сопоставляем 3, чем число, ширина которого составляет один или два символа, затем в конце 2020 года.

3\/\d{1,2}\/2020

https://regex101.com/r/jn4zwa/1

...