基本上我想要实现的目标如下: 在我的 iOS 应用程序中,可以扫描 QR 码来获取特定休息室的 ID,并将其 JSON 数据(目前只有 ID 和名称)保存在 MongoDB 中。
每个休息室都可以(但不是必须)将产品添加到其休息室,以便最终在扫描二维码后,客户能够看到提供哪些产品。
产品目前仅包含名称和 imageURL,但不包含价格,因为价格可能会有所不同并由休息室所有者设置。因此,同一种产品的价格可能会有所不同。
我想知道,实现该方法的架构的正确和最佳方法是什么,以便我可以轻松地获取特定休息室的所有产品(也许可以根据其 ID)。
到目前为止我得到了什么:
休息室.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);
产品.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();
产品数组将包含每个休息室的相关产品
关于node.js - 如何在 mongooseJS 中相互连接模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58064916/