gpt4 book ai didi

javascript - 如何查询嵌套文档并从中返回属性?

转载 作者:可可西里 更新时间:2023-11-01 10:42:18 26 4
gpt4 key购买 nike

我有一个 Product 集合,每个文档看起来像这样:

"_id" : ObjectId("574393c59afcfdd3763d91b1"),
"name" : "dummy product name",
"price" : 200,

"category" : ObjectId("574393c59afcfdd3763d91ad"),
"images" : [ ],
"ratings" : [
2
],
"reviews" : [ ],
"purchase_count" : 0,
"tags" : [
ObjectId("574393c59afcfdd3763d91a9"),
ObjectId("574393c59afcfdd3763d91ab")
]

其中类别和标签是对其各自集合的引用,并且它们每个都有一个名称属性。以下是所有 3 个模式:

   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 }
});

我正在尝试查询产品集合并返回每个产品的数据,如下所示:

app.models.Product.find({}, function(err, products){
if (err) throw err;
res.json(products);
}).populate('category').populate('tags').exec();

唯一的区别是我想要类别的实际名称,而不是用它的 ID 表示集合的文档。我也想要相同的标签,我只想要一个简单的字符串数组来表示标签名称。我怎样才能在查询中做到这一点?

我尝试通过在第二个 populate() 之后使用 select() 并编写“category.name tags.name(然后是所有其他属性)”来隐式定义我想要选择的内容,但这没有用。

查询结果如下:

enter image description here

最佳答案

这就是我让它工作的方式。感谢 Neta Meta 给了我使用纯 JS 的想法。

app.models.Product.find({})
.populate('category' , 'name')
.populate('tags', 'name').populate('seller', 'name').exec(function(err, products){

if (err) throw err;

products = products.map(function(a){

var productToSend = {};
productToSend.name = a.name;
productToSend.price = a.price;
productToSend.description = a.description;

if(a.seller != undefined){
productToSend.seller = a.seller.name;
}

if(a.tags != undefined){
productToSend.tags = a.tags.map(function(b){
return b.name;
});
}
productToSend.purchase_count = a.purchase_count;
productToSend.reviews = a.reviews;
productToSend.ratings = a.ratings;

if(a.category != undefined){
productToSend.category = a.category.name;
}

productToSend.images = a.images;

return productToSend;

})
res.json(products);
});

关于javascript - 如何查询嵌套文档并从中返回属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37402811/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com