javascript - Mongoose Find All 然后在其他模式中为每个查找所有

标签 javascript node.js mongodb mongoose

在我的应用程序中我需要找到类别,然后我想要这个类别的书籍

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

它可能更漂亮,但它只向您的数据库发出一个请求,并且应该按照您想要的方式工作

关于javascript - Mongoose Find All 然后在其他模式中为每个查找所有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46855711/

相关文章:

javascript - 如何在 npm install 中克服这个错误?

node.js - Node.js Passport 的 Google 策略上的自定义 returnUrl

python - pymongo: 名称 'ISODate' 未定义

javascript - 在javascript中删除一行文本

javascript - 在 express 中使用自己文件中定义的多个路由器

javascript - jQuery 使用相对值更改背景位置

node.js - TypeError : sequelize. 导入不是函数

mongodb - 如何在 MongoDB 中查找包含 NaN 字段的所有文档?

javascript - 为什么在声明这个javascript函数时参数中有大括号? ( Node ,model.js 中的 MongoDB)

javascript - 为什么 JavaScript 中的取消按钮无法关闭叠加菜单?