Tengo este tipo de documentos en mongoDB.
{ _id:620df4541571891a71dfa372 user_id:61cc109f967b757d484fbf3b instrument_type:"binance" sub_instrument:"BTC/USDT" start_date:2022-02-17T00:00:00.000+00:00 type_quantity:2 prediction:"High" points:12 price:null run_at:null createdAt:2022-02-17T07:08:04.633+00:00 updatedAt:2022-02-17T07:08:04.633+00:00 }Aquí tengo "start_date", que es el día de inicio. "type_quantity", que es el número de semanas desde el día de inicio.
Ejemplo: si "start_date" es 2022-02-17T00:00:00.000+00:00 y "type_quantity" es 2. Entonces, las fechas por semana serán 2022-02-17, 2022-02-24 y 2022-03 -03. Y si la fecha actual es una de estas fechas, obtenga este documento.
Puede usar $dateAdd en una consulta de agregación como esta:
Tenga en cuenta que aquí solo es necesaria una etapa $match con $expr para obtener documentos donde:
$$NOW ) es mayor o igual que $start_date .$$NOW ) es menor o igual que la fecha calculada sumando X semanas. es decir, la fecha encontrada está entre $start_date y start_date + X semanas.
db.collection.aggregate([ { "$match": { "$expr": { "$and": [ { "$gte": [ "$$NOW", "$start_date" ] }, { "$lte": [ "$$NOW", { "$dateAdd": { "startDate": "$start_date", "unit": "week", "amount": "$type_quantity" } } ] } ] } } } ])Ejemplo aquí agregando más documentos.