Le document nested de requête Mongoose renvoie un tableau vide

J’ai ces schémas:

var Store = mongoose.model('Store', new Schema({ name: Ssortingng })); var Client = mongoose.model('Cllient', new Schema({ name: Ssortingng, store: { type: Schema.ObjectId, ref: 'Store' } })); var Order = mongoose.model('Order', new Schema({ number: Ssortingng, client: { type: Schema.ObjectId, ref: 'Client' } })); 

J’essaie de coder le gestionnaire d’URL de l’API qui renvoie les détails de la commande, qui ressemble à ceci:

 app.get('/api/store/:storeId/order/:orderId', function (...)); 

Je passe l’ID du magasin dans l’URL pour vérifier rapidement si l’utilisateur connecté a des permissions sur le magasin. Sinon, il retourne un statut 403. Cela dit, je pense que les informations storeId et orderId sont suffisantes pour obtenir la commande. J’essaie donc d’interroger un document nested, mais cela ne fonctionne tout simplement pas.

 Order.findOne( { 'client.store': req.params.storeId, _id: req.params.orderId }, function (err, order) { ... }); 

Mais l’object de commande est null;

Même lorsque j’effectue une recherche, il renvoie un tableau vide:

 Order.find( { 'client.store': req.params.storeId }, function (err, results) { ... }); 

Je sais que je pourrais aussi bien passer le cliendId à l’URL et vérifier d’abord si le client appartient au magasin, puis récupérer la commande du client, mais je pense que la partie client est redondante, vous ne pensez pas? Je devrais pouvoir obtenir la commande de manière sécurisée en utilisant uniquement ces deux champs.

Qu’est-ce que je fais mal ici?

Ok, je l’ai trouvé. Le secret était dans l’option de correspondance de peupler. Le code final ressemble à ceci:

 Order .findOne({ _id: req.params.orderId }) .populate({ path: 'client', match: { store: req.params.storeId } }) .exec(function (err, order) { ... });