Итак, у меня есть эти данные в моей БД,
[
{
"_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:, но не получил ожидаемого результата.





Вы можете использовать регулярное выражение. Следующий пример с использованием мангуста:
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
Вы также можете попробовать следующее:
db.collection.find(
{"from": {"$gte": new Date(2018, 0, 1), "$lt": new Date(2018, 1, 1)}}
)
Также помните, что в функции Date () аргумент месяца начинает отсчет с 0, а не с 1.
Обновлять: MongoDB V3.4
db.collection.aggregate([
{$project: { "month" : {$month: '$date'}, "year" : {$year: '$date'}}},
{$match: { month: 1, year: 2018}}
]);
это должен быть "$lt": new Date(2018, 1, 1)?
Да .. обновлю ответ .. или может быть "$lte"
Если вы используете $lte, вам нужно указать время 23:59:59 ... лучше используйте $lt и следующую дату.
Думаю, вы правы. Я нашел новый ответ после того, как вы предложили.
Могу ли я использовать регулярное выражение в mongoplayground? Я получаю сообщение об ошибке при использовании этого регулярного выражения