Если вы можете убедиться, что все строки находятся в одном часовом поясе и формате, вы можете просто сравнить их как строки:
db.getCollection('collection_data').find({"tager.date_from":
{ $lte : new Date(ISODate().getTime() - (1000 * 86400 * 50)).toString() },
"status": "active"})
Убедитесь, что при преобразовании даты в строку вы убедитесь, что преобразовали ее в тот же формат и часовой пояс, которые вы сохранили.
С учетом сказанного, это явно не рекомендуемое решение. у вас есть 2 варианта:
- Сохранить даты как
Date
. это потребует от вас обновления кода и базы данных, но, на мой взгляд, это будет лучшим долгосрочным решением. - Если вы используете Mon go версии 3.6+, вы можете использовать Mon go 's $ dateFromString
db.getCollection('collection_data').aggregate([
{
$addFields: {
tagerDate: {$dateFromString: {dateString: "$tager.date_from"}}
}
},
{
$match: {
tagerDate: {$lte: new Date(ISODate().getTime() - (1000 * 86400 * 50))}
}
}
]);