簡體   English   中英

貓鼬的“查找全部”,然后針對每個查找其他模式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM