Ich habe ein Array als Subdokument im Mungo-Modell wie folgt definiert:Wie finden Sie Array-Elemente mit 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);
Jetzt möchte ich über alle Bücher eines bestimmten Autors die Gesamtzahl der 'fun'
Seiten zu bekommen. Viele ähnliche Fragen (und Antworten), die ich gefunden habe, besprechen, wie man in diesem Szenario Book
s mit lustigen Seiten findet, aber ich möchte ein Array aller spaßigen Seiten oder zumindest die Länge dieses Arrays bekommen, aber wenn möglich, würde ich gerne Holen Sie sich das Array selbst. Wie kann ich das machen?
Danke,
Try (ungetestet, wird als Antwort, wenn richtig hinzugefügt werden): Book.aggregate ( {$ entspannen: "$ Seiten"}, {$ group: { _id: "$ pages.type", Zahl: {$ Summe: 1}}} ) – nadavvadan
@nadavvadan Danke! Es scheint, als ob es funktioniert. Aber ich habe gerade erkannt, dass ich noch eine Filterung brauchte, anstatt aller Bücher muss ich nur aus Büchern von einem bestimmten Autor auswählen. Wenn es nicht viel zu fragen gibt, können Sie das bitte auch hinzufügen? :) Danke nochmal, – jeff
versuche das: Book.aggregate ({$ match: {author: ObjectId ("12-Byte-of-hex")}}, {$ unwind: "$ pages"}, {$ group: { _id: "$ pages.type", Anzahl: {$ sum: 1}}}) – nadavvadan