пн goose findMany запрос с реф. - PullRequest
0 голосов
/ 07 мая 2020

Я новичок в mon goose Я действительно не нашел никакой ссылки, как mon goose populate работает с запросом findMany, имеющим ref

, например, у меня есть коллекция categories а коллекцию products, как на продукте, можно назначить многим категориям, поэтому они существуют в 2 разных коллекциях.

Теперь, если я вызываю метод findMany в коллекции categories, а также populate с products будет пн goose выполнить поиск товаров по категории? или будут собраны все идентификаторы продуктов, на которые есть ссылки, и в одном запросе все продукты будут запрошены, например, dataloader do?

1 Ответ

0 голосов
/ 07 мая 2020

У вас должно быть две схемы, категория и продукт:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const productSchema = Schema({
  _id: Schema.Types.ObjectId,
  name: String,
  price: Number,
  // ...
  categories: [{ type: Schema.Types.ObjectId, ref: 'Category' }]
});

module.exports = mongoose.model('Product', productSchema );

const categorySchema = Schema({
  title: String,
  description:String,
  products: [{ type: Schema.Types.ObjectId, ref: 'Product' }]
});

module.exports = mongoose.model('Category', categorySchema );

Чтобы найти категорию по идентификатору с заполненными продуктами, вы можете:

app.get('/categories/:id', (req, res) => {

    const categoryId = req.params.id;

    (async () => {
        try {
            const categories = await Categories
                  .find({ _id: categoryId }).populate("products") // you'r populating the property of the schema called products
            res.status(200).json({ results: categories })
        } catch (err) {
            res.status(500).json({ message: "Error ..." })
        }
    })()
});
...