[英]Mongoose Find All then find all in other schema for each
在我的應用程序中,我需要找到類別,然后我想要該類別的書籍
const CategorySchema = mongoose.Schema({
displayname: String,
category: String
});
module.exports = mongoose.model('Category', CategorySchema);
}
const BookSchema = mongoose.Schema({
name: String,
img: String,
category: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Category'
}
});
module.exports = mongoose.model('Books', BookSchema);
我需要這樣的回應
categories = [
{
category: 'News',
books: [{name:'',id''},{}..]
},
{
category: 'Sports',
books: [{name:'',id''},{}..]
}
];
所以我的代碼看起來像這樣
Router.get('/categories/', (req, res) => {
Category.find({}, (err, categories) => {
Promise.all(categories.map(category => {
return Book.find({category: category._id}).then( books => {
return {
category: category,
books: books
};
})
})).then( categories => {
res.json(categories);
})
})
});
請有人知道是否對此查詢有更好的解決方案? 謝謝大家!
這個怎么樣?
Router.get('/categories/', (req, res) => {
Book.find().populate('category').then( books => {
var categories = {}
for(var i = 0; i < books.length; i++){
categories[books[i].category.displayname] = {
category: books[i].category.displayname
books: categories[books[i].category.displayname].books ? categories[books[i].category.displayname].books.push(books[i]) : [books[i]]
};
}
var result = [];
for(var key in categories){
result.push(categories[key])
}
return result;
});
});
它可能更漂亮,但是它只會向您的數據庫發出一個請求,並且應該以您想要的方式工作
來自http://mongoosejs.com/docs/populate.html
Book.
find({}).
populate('category').
exec(function (err, story) {
if (err) return handleError(err);
// Do other things
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.