如何在 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 数组将包含每个休息室的相关产品
基本上我要实现的目标如下: 在我的 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 数组将包含每个休息室的相关产品