Есть ли более чистый способ заполнения схемы вложенных объектов в Mongoose? - PullRequest
0 голосов
/ 09 июня 2019

Я создаю систему заказов, в которой есть пользователи с несколькими ролями. Каждый пользователь имеет несколько связанных заказов. Каждый заказ имеет вложенный объект с именем «Peeps», который имеет 3 свойства: Клиент, Доставка, Логистика.

Я пытаюсь заполнить модель User, и я нашел способ заполнить пользователей в объекте Orders Peeps (см. Схему ниже), но это довольно громоздко, поскольку требует нескольких вызовов наполнения, и мне было интересно, есть ли лучший путь.

Я тоже не совсем уверен насчет Схемы, но я просто пробую что-то и наткнулся на этот маленький кусочек проблемы.

1007 * Schemas *


const UserSchema = Schema({
    Name: {
        type: String,
        default: "John Doe"
    },
    Password: {
        type: String,
        default: "password"
    },
    Email: {
        type: String,
        unique: true
    },
    Phone: {
        type: String,
        unique: true
    },
    Orders: [{
        type: Schema.Types.ObjectId,
        ref: "orders"
    }]
});

const OrderSchema = Schema({

    Peeps: {
        Client: {
            type: Schema.Types.ObjectId,
            ref: "users"
        },
        Logistics: {
            type: Schema.Types.ObjectId,
            ref: "users"
        },
        Delivery: {
            type: Schema.Types.ObjectId,
            ref: "users"
        },
    },
    LocationUpdates: [{
        type: LocationUpdateSchema,
        ref: "locationupdates"
    }]
});

Код запроса, который заполняет данные (работает, но это не так)

const query = await Users.findOne({ Email: "john.doe@gmail.com" })
                .populate({
                    path: "Orders",
                    populate: {
                        path: "Persons.Client"
                    }
                })
                .populate({
                    path: "Orders",
                    populate: {
                        path: "Persons.Delivery"
                    }
                })
                .populate({
                    path: "Orders",
                    populate: {
                        path: "Persons.Logistics"
                    }
                });


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...