如何在 mongooseJS 中将模式相互连接?

How to connect schemas with each other in mongooseJS?

基本上我要实现的目标如下: 在我的 iOS 应用程序中,可以扫描 QR 码以获取特定休息室的 ID,并将其 JSON 数据(目前只有 ID 和名称)保存在 MongoDB 中。

每个休息室都能够(但不是必须)向其休息室添加产品,因此最后,在扫描 QR 码后,客户能够看到提供了哪些产品。

产品目前仅包含名称和图像 URL,但不包含价格,因为价格可能会有所不同并由休息室所有者设置。所以同一种产品的价格可能不同。

我想知道实施该方法的模式的正确和最佳方法是什么,这样我就可以轻松获取特定休息室的所有产品,也许是基于其 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);

基本上可以使用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();

products 数组将包含每个休息室的相关产品