提问人:Alim Gölcük 提问时间:12/30/2022 更新时间:12/30/2022 访问量:149
如何在Mongoose的数组中填充ObjectId对象?
How to populate an ObjectId object within an array in Mongoose?
问:
首先,我在 StackOverflow 中找到了很多关于该问题的答案,但是,它们都没有解决我的问题。
我有一个这样的userSchema:
const UserSchema = new Schema({
userName: {
type: String,
required: true,
},
userSurname: {
type: String,
required: true,
},
userEmail: {
type: String,
unique: true,
required: true,
},
userPassword: {
type: String,
required: true,
},
userRole: {
type: String,
enum: ['müşteri', 'admin'],
default: 'müşteri',
},
userCart: [
{
productId: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Product',
},
quantity: Number,
price:Number,
},
],
});
我想在userCart的数组中填充productId,这样我就可以访问:
const ProductSchema = new Schema({
productName: {
type: String,
unique: true,
required: true,
},
productBrand: {
type: String,
required: true,
},
productPrice: {
type: String,
required: true,
},
productPhoto: {
type: String,
required: true,
},
productQuantity: {
type: Number,
required: true,
},
slug: {
type: String,
unique: true,
},
category: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Category',
},
});
这些字段。
我试过了
const products = await User.findById(req.session.userID).populate('userCart');
和
const products = await User.findById(req.session.userID).populate('userCart.productId');
我认为这可能是因为 findById,所以我尝试了 findOne 而不是 findById,但那个也没有用。
这样做之后,我试图像这样进入ejs文件,但它什么也没显示。
<% for(let i =0; i< products.userCart.length; i++) { %>
<div>
<%= products.userCart[i].productName %>
</div>
<% } %>
任何帮助都是值得赞赏的,提前致谢。
答:
0赞
Dimitar Stojanovski
12/30/2022
#1
如果要填充架构,则必须在执行“查找”查询时对该架构执行 preQuery。
首先,我认为您必须更新您的 UserSchema。在 userSchema 定义中为您的 userCart 更新此内容:(尽量避免嵌套。
userCart: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Product',
},
然后,将此中间件查询添加到您的 userSchema:
//QUERY MIDDLEWARE
UserSchema.pre(/^find/, (next) => {
this.populate({
path:"userCart",
});
next();
});
此代码将被执行,并在 userSchema 的每个“查找”查询中填充该 productId 的数据。
如果您有任何问题或疑问,请告诉我。
评论
0赞
Alim Gölcük
12/30/2022
但是我需要那个“数量:数字”字段。此字段来自用户填写的输入。此外,userCart 必须是一个数组,因为它可能有多个 Product。@Dimitar斯托亚诺夫斯基
0赞
Alim Gölcük
12/30/2022
现在,ı 无法登录时,ı 将代码更改为该:) @DimitarStojanovski
0赞
Dimitar Stojanovski
12/30/2022
该价格字段肯定应该在您的产品架构中。
1赞
Dimitar Stojanovski
12/30/2022
也许最好为每个购物车设置另一个架构。请检查此示例。它是用 NestJs 编写的,但这是同一个问题。blog.logrocket.com/how-build-ecommerce-app-nestjs@AlimGölcük
0赞
Alim Gölcük
12/30/2022
我会的,谢谢你的努力@DimitarStojanovski
评论