J'ai un tableau comme un sous-document dans le modèle Mongoose défini comme suit:Comment trouver des éléments de tableau avec Mongoose?
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var schema = Schema({
author: { type: Schema.Types.ObjectId, ref: 'Author' },
pages: [{
number: Number,
type: { type: String, enum: ['boring', 'fun']},
}]
});
module.exports = mongoose.model('Book', schema);
Maintenant, je veux obtenir le nombre total de pages 'fun'
à travers tous les livres par un auteur. Beaucoup de questions similaires (et réponses) j'ai trouvé comment trouver Book
s avec des pages amusantes dans ce scénario, mais je veux obtenir un tableau de toutes les pages amusantes, ou au moins la longueur de ce tableau, mais si possible, je voudrais obtenir le tableau lui-même. Comment puis-je faire ceci?
Merci,
Essayez (non testé, va ajouter une réponse si elle est correcte): Book.aggregate ( {$ détendre: "pages $"}, { groupe $: { _id: "pages.type de $", nombre: {somme de $: 1}}} ) – nadavvadan
@nadavvadan Merci! Il semble que ça marche. Mais je viens de me rendre compte que j'avais besoin d'un filtre de plus, au lieu de tous les livres, je dois sélectionner des livres seulement par un certain auteur. Si ce ne sera pas beaucoup à demander, pouvez-vous s'il vous plaît ajouter cela aussi? :) Merci encore, – jeff
essayez ceci: Book.aggregate ({$ match: {auteur: ObjectId ("12-octets-de-hex")}}, {$ unwind: "$ pages"}, {$ group: { _id: "$ pages.type", compte: {$ sum: 1}}}) – nadavvadan