GOOGLE ADS

dimanche 24 avril 2022

Comment puis-je refactoriser les requêtes $let suivantes

Je prévois de migrer mongodb vers documentdb d'aws. Selon la documentation de DocDB, les requêtes $let ne sont pas prises en charge nativement. Je recherche donc des options sur la façon dont je peux refactoriser les éléments suivants:

let params.status = ["Pending", "Scheduled", "Completed"];
const searchedValues = params.status.map(val => ({ $eq: [ '$$current_status.value', val ] }));
query.$expr = {
$let: {
vars: {
current_status: {
$arrayElemAt: [
'$status_history',
-1
]
}
},
in: {
$or: searchedValues
}
}
};

Deuxième requête :

const searchedValues = params.status.map(val => ({ $eq: [ '$$current_status.value', val ] }));
query.$expr = {
$let: {
vars: {
current_status: {
$arrayElemAt: [
'$status_history',
-1
]
}
},
in: {
$or: searchedValues
}
}
};

status_historyest un tableau.

Je n'ai pas suffisamment travaillé avec mongodb pour pouvoir refactoriser cela. Toute aide serait appréciée.


Solution du problème

La solution de contournement que je vois consiste à affecter la variable current_status dans le code, à la suite de la requête { $arrayElemAt: [ '$status_history', -1 ]}, puis effectuez la requête $or. Oui, ce sera 2 requêtes au lieu d'une, mais cela peut être un compromis raisonnable.

Aucun commentaire:

Enregistrer un commentaire

Comment utiliseriez-vous .reduce() sur des arguments au lieu d'un tableau ou d'un objet spécifique ?

Je veux définir une fonction.flatten qui aplatit plusieurs éléments en un seul tableau. Je sais que ce qui suit n'est pas possible, mais...