2 votes

La requête Mongoose find avec populate renvoie une erreur sur Azure MongoDB après que les résultats de la requête aient atteint 500+.

Je suis assez novice en ce qui concerne MongoDB, Mongoose, ainsi que les environnements Azure. J'ai des problèmes avec une requête spécifique qui fonctionne bien. Mais elle génère une erreur lorsque les résultats attendus de la requête sont supérieurs à 500. Le résultat est le rapport accumulé qui peut avoir un maximum de 1200 enregistrements. Et les résultats sont générés à partir de 2 collections avec la population. Voici ma fonction node.js/express api qui génère les résultats.

index: (req, res, next) => {
    Store.find({isChecked: true}).batchSize(1200)
    .populate('lastCheckResult').exec(function (err, stores) {
      if (err) {
        console.log(err);
        return next(err);
      }
      else {
        res.locals.stores = stores;
        return next();
      }
    });
  },

Et voici l'erreur de l'application Web Azure (node.js).

"Message : {"errors" :[{"severity" : "Error", "location":{"start":0, "end":75279}, "code" : "SC3004", "message" : "La requête SQL a dépassé le nombre maximum d'opérateurs 'OR'. La limite autorisée est de 500."}]} ActivityId : 96ebe198-0000-0000-0000-000000000000, Request URI : /apps/32fe74cb-f1dd-4433-bfbf-ba15991cdee1/services/d914c6a9-eb86-43d8-9108-4ee395d25345/partitions/aa7a586e-7f30-4a02-99e4-8a21d2dc8295/replicas/131759772120608879s, RequestStats: ResponseTime : 2018-07-30T10:54:11.9018240Z, StoreReadResult : StorePhysicalAddress : rntbd://10.0.0. 48:14000/apps/32fe74cb-f1dd-4433-bfbf-ba15991cdee1/services/d914c6a9-eb86-43d8-9108-4ee395d25345/partitions/aa7a586e-7f30-4a02-99e4-8a21d2dc8295/replicas/131759772120608879s, LSN: 2965, GlobalCommittedLsn: 2964, PartitionKeyRangeId: 0, IsValid : True, StatusCode : 0, IsGone : False, IsNotFound : False, IsInvalidPartition : False, RequestCharge : 1, ItemLSN : -1, ResourceType : Document, OperationType : Query , SDK : Microsoft.Azure.Documents.Common/2.0.0.0".

Quelqu'un peut-il m'aider à résoudre ou à contourner ce type de problème ?

1voto

Jay Gong Points 11648

La requête SQL a dépassé le nombre maximum d'opérateurs 'OR'. Le site limite autorisée est de 500.

D'après votre journal d'erreurs, je présume que vous utilisez l'API Mongo de Cosmos DB. En fait, CosmosDB est une implémentation serveur indépendante qui ne s'aligne pas directement sur les versions et les fonctionnalités du serveur MongoDB.

CosmosDB prend en charge un sous-ensemble de l'API MongoDB et traduit les requêtes en l'équivalent SQL de CosmosDB. CosmosDB présente des comportements et des résultats différents. Mais il incombe à CosmosDB d'améliorer son émulation de MongoDB.

Je vous suggère de diviser le nombre de vos données de requête par lot pour éviter temporairement cette limitation. J'ai également recherché un cas similaire lié à cette limitation : Le texte de la requête SQL a dépassé la limite maximale de 30720 caractères dans Azure CosmosDB. .

Bien sûr, vous pouvez ajouter des commentaires aquí pour obtenir une aide officielle ou envisager d'utiliser Atlas MongoDB sur Azure si vous souhaitez bénéficier de toutes les fonctionnalités de MongoDB.

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X