我有一个User
架构和Product
架构。用户可以向数据库添加许多产品。
每个产品都会跟踪将产品添加到数据库中的人员。
每个用户通过将productSchema嵌套到数组中来跟踪添加的项目
const productSchema = new Schema({
//...
addedBy: {
type: mongoose.Schema.Types.ObjectId,
ref: "users"
}
});
const userSchema = new Schema({
//...
addedItems: [productSchema]
});
mongoose.model("products", productSchema);
mongoose.model("users", userSchema);
以下是我尝试填充User的addedItems的方法:
User.findOne({ _id: req.body.id })
.populate({
path: "addedItems",
match: { addedBy: req.body.id },
select: "_id"
})
我正在尝试做什么:
首先通过ID查找用户(没问题)。然后根据条件填充'addedItems'数组。如果'addedBy'包含SAME id作为当前用户,则将product._id填充到数组中。
问题:当我检查用户的addedItems时,数组总是显示为空。尽管如此,DB中有多个产品,其中'addedBy'具有匹配的ID。
我做错了什么?
答案 0 :(得分:1)
我认为您的架构不是为执行该查询而设计的。 我的建议是:
const productSchema = new Schema({
//...
addedBy: {
type: mongoose.Schema.Types.ObjectId,
ref: "User"
}
});
const userSchema = new Schema({
//...
addedItems: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Product'
}]
});
mongoose.model("Product", productSchema);
mongoose.model("User", userSchema);
查询以填充用户添加的项目
User.findOne({ _id: req.body.id }).populate('addedItems');