Ich habe eine Sammlung Produkt und jedes Dokument sieht in etwa wie folgt aus:Wie kann ich ein verschachteltes Dokument abfragen und Attribute von ihm zurückgeben?
"_id" : ObjectId("574393c59afcfdd3763d91b1"),
"name" : "dummy product name",
"price" : 200,
"category" : ObjectId("574393c59afcfdd3763d91ad"),
"images" : [ ],
"ratings" : [
2
],
"reviews" : [ ],
"purchase_count" : 0,
"tags" : [
ObjectId("574393c59afcfdd3763d91a9"),
ObjectId("574393c59afcfdd3763d91ab")
]
Wo Kategorie und Tags Verweise auf ihre jeweiligen Sammlungen sind und sie haben jeweils ein Namensattribut. Hier sind alle drei Schemata:
var ProductSchema = new mongoose.Schema({
name : {type: String, required: true},
price : { type: Number,required: true },
tags : [{ type: Schema.Types.ObjectId, ref: 'Tag' }],
purchase_count : {type: Number, default: 0},
reviews : [ReviewSchema],
ratings : [{type: Number, min: 0, max: 10}],
category : {type: Schema.Types.ObjectId, ref: 'ProductCategory'},
images : [{type: String}]
});
var ProductCategorySchema = new mongoose.Schema({
name : { type: String, required: true, unique: true, dropDups: true }});
var TagSchema = new mongoose.Schema({
name : { type: String, required: true, unique: true, dropDups: true, lowercase: true }
});
Ich versuche, die Produktsammlung zur Abfrage und Rück Daten jedes Produkt wie folgt aus:
app.models.Product.find({}, function(err, products){
if (err) throw err;
res.json(products);
}).populate('category').populate('tags').exec();
Der einzige der Unterschied ist, dass ich den tatsächlichen Namen wollen von die Kategorie anstelle eines Dokuments, das die Sammlung mit ihrer ID darstellt. Ich möchte auch das gleiche für die Tags, ich möchte nur ein einfaches Array von Strings, die die Tag-Namen darstellen. Wie kann ich das in der Abfrage tun?
Ich versuchte implizit zu definieren, was ich auswählen wollte, indem Sie eine select() nach dem zweiten populate() und schreiben 'category.name tags.name (und dann alle anderen Attribute)' aber das hat nicht funktioniert.
Dies ist, was das Ergebnis der Abfrage wie folgt aussieht:
Ich versuchte das auch. Sie gibt das Dokumentobjekt zwar zurück, behält jedoch nur die von Ihnen angegebenen Felder bei. – ninesalt
Und Sie wollen es so etwas wie user.category = ['cat1', 'cat2']? –
Die Kategorie ist nur eine einzelne Zeichenfolge, aber die Tags sollten so sein, ja. – ninesalt