Есть ли способ проверить связанные документы в мангусте, который более эффективен, чем .populate (), и объединить его вместе - PullRequest
0 голосов
/ 11 января 2019

С учетом этих моделей:

Продукты:

const productSchema = new Schema({
    name: String,
    description: String,
    price: Number,
    steps: [{
        type: Schema.Types.ObjectId,
        ref: 'steps'
    }]
});

Шаги:

const stepSchema = new Schema({
    name: String,
    minimum: Number,
    maximum: Number,
    items: [
        {
            name: String,
            price: Number
        }
    ]
});

Есть ли лучший способ сделать запрос к объекту с N-ным количеством Products, а не со всеми выбранными products.steps без использования .populate () (потому что он сделает запрос для каждого значения в массиве products.steps) и для цикла для суммирования всех цен, включенных в productSchema и stepSchema?

Пример использования:

В моих документах у меня есть такая коллекция продуктов:

[{
    id: 1
    name: Pizza,
    description: "Medium (3 flavors)",
    price: 10,
    steps: [{
        "1",
        "2"

    }]
},
{
    id: 2
    name: Pizza,
    description: "small (1 flavors)",
    price: 10,
    steps: [{
        "1",

    }]
}]

И такие шаги, как:

[{
    id: 1
    name: "Flavor",
    minimum: 0,
    maximum: 1,
    items: [
        {
            id: 1
            name: "mozzarella",
            price: 4
        },
        {
            id: 2
            name: "pepperoni",
            price: 5
        }
    ]
},
{
    id: 2
    name: "Border",
    minimum: 0,
    maximum: 0,
    items: [
        {
            id: 3
            name: "With normal cheese",
            price: 0
        },
        {
            id: 4
            name: "With special cheese",
            price: 3
        }
    ]
}]

Так есть ли лучший способ проверки объекта, подобного этому, в моем BD с меньшим количеством запросов и без цикла for?

products: [
    {
        productId: 1,
        price: 30,
        quantity: 3,
        steps: [{
            stepId: 1
            items: [
                {
                    itemId: 1,
                    price: 4
                },
                {
                    itemId: 2,
                    price: 5
                }
            ]
        }]

    }
]

1 Ответ

0 голосов
/ 11 января 2019

Я думаю, что следующие шаги должны быть выполнены:

  1. $ lookup (агрегат) или заполнить
  2. $ проекта (агрегация)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...