Как связать схемы друг с другом в mongooseJS? - PullRequest
0 голосов
/ 23 сентября 2019

По сути, я пытаюсь добиться следующего: в моем приложении для iOS можно отсканировать QR-код, чтобы получить идентификатор конкретного зала, и с этим его данные JSON (пока только идентификатор и имя) сохраняются в MongoDB.

Каждый зал может (но не обязан) добавлять товары в свой зал, так что в итоге после сканирования QR-кода покупатель может увидеть, какие товары предлагаются.

На данный момент товар содержит только имя и imageURL, но не цену, потому что цена может изменяться и устанавливаться владельцами зала.Поэтому цена одного и того же продукта может быть разной.

Я хотел бы знать, каков правильный и лучший способ реализации схем для этого подхода, чтобы я мог легко получить все продукты одного и того же продукта.конкретный зал, возможно, на основании его ID.

Что я получил до сих пор:

lounge.js:

const mongoose = require('mongoose');

const loungeSchema = mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    name: { type: String, required: true }
});

module.exports = mongoose.model ('Lounge', loungeSchema);

product.js

const mongoose = require('mongoose');

const productSchema = mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    name: { type: String, required: true },
    imageURL: { type: String, required: true, unique: true }
});

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

1 Ответ

3 голосов
/ 23 сентября 2019

В основном вы можете использовать mongoose populate .Вы можете добиться этого, храня продукты в отдельной коллекции и в основном заполняя массив в схеме зала, используя _id для зала, позвольте мне показать вам пример:

Ваша схема зала будет выглядеть примерно так

const mongoose = require('mongoose');

const loungeSchema = mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    name: { type: String, required: true }
    products: [type: Schema.Types.ObjectId, ref: 'Products' ]
});

module.exports = mongoose.model('Lounge', loungeSchema);

И ваша схема продукта

const mongoose = require('mongoose');

const productSchema = mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    name: { type: String, required: true },
    imageURL: { type: String, required: true, unique: true }
});

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

При сохранении создания зала просто добавьте _id продукта в массив products, который отличается от схемы зала.Таким образом, в основном вы находите продукт и извлекаете его _id.

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

lounge.find({}).populate('products').exec();

массив продуктов будет иметь соответствующие продукты для каждого зала

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