J'ai une collection de commandes et orderLastStatusChangeDatetime, estimateDeliveryDatetime et orderPrice sont classés nom de la collection de commandes. Je dois obtenir la somme de orderPrice où orderLastStatusChangeDatetime est égal ou inférieur à estimateDeliveryDatetime. J'ai utilisé la requête ci-dessous pour obtenir l'enregistrement total ...printemps mongodb agrégation comparer deux champ et obtenir la somme d'une colonne
Criteria criteria = new Criteria() {
@Override
public DBObject getCriteriaObject() {
DBObject obj = new BasicDBObject();
obj.put("$where", "this.orderLastStatusChangeDatetime <= this.estimatedDeliveryDatetime");
return obj;
}
};
Query query = new Query();
query.addCriteria(criteria);
totalOrder = (int) mongoTemplate.count(query,ORDERS_COLLECTION_NAME);
Mais je dois obtenir la somme du prix de la commande. J'ai utilisé les mêmes critères dans la correspondance d'agrégation. Mais il donne une erreur "La commande a échoué avec l'erreur 16395: 'exception: $ where n'est pas autorisé dans une expression d'agrégation $ match'"
Merci pour votre aide Veeram rapide ... Mais je recevais erreur --- – Pankaj
java.lang.IllegalArgumentException: Élément non pris en charge: org .springframework.data.mongodb.core.spel.OperatorNode @ 542dba3f Type: classe org.springframework.data.mongodb.core.spel.OperatorNode Vous avez probablement une erreur de syntaxe dans votre expression SpEL! – Pankaj
Vous êtes les bienvenus. J'ai été capable de courir avec succès sur la version 1.10.1 printemps mongo. Pouvez-vous me montrer le code et quelle version utilisez-vous? C'est la requête que je vois sur le serveur '{" $ project ": {" orderPrice ": 1," cmp ": {" $ lte ": [" $ orderLastStatusChangeDatetime "," $ estiméDeliveryDatetime "]}}}, {" $ match ": {" cmp ": true}}, {" $ groupe ": {" _id ": null," total ": {" $ sum ":" $ orderPrice "}}}' – Veeram