我试图用项目填充用户模式,但是由于某种原因,它没有将任何内容填充到用户模式中。有人可以看看。我的数据库中有1个用户和1个属于该用户的项目,但是没有任何内容,因此我一直看到null。
用户架构
var mongoose = require('mongoose')
var userSchema = mongoose.Schema({
name: {
type: String,
required: true
},
discordID: {
type: String,
required: true
},
discordImage: {
type: String,
required: true
},
items: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Item'
}]
})
const User = module.exports = mongoose.model('User', userSchema)
项目架构
var mongoose = require("mongoose")
var itemSchema = mongoose.Schema({
name: {
type: String,
required: true
},
purchasedPrice: {
type: Number,
required: true
},
purchasedDate: {
type: String,
required: true
},
author: {
type: mongoose.Schema.Types.ObjectId,
required: true,
ref: "User"
}
})
const Item = module.exports = mongoose.model("Item", itemSchema)
填充代码
app.get("/inventory", async (req, res) => {
try {
await req.user.populate({
path: 'items'
}).execPopulate()
console.log(req.user)
} catch (error) {
console.log(error)
}
res.status(200).render("inventory.ejs", { currentUser: req.user })
})
数据库中的对象:
项目:
用户:
答案 0 :(得分:0)
在用户架构上使用虚拟方法创建关联
userSchema.virtual("items", {
ref: "Item",
localField: "_id",
foreignField: "author"
})
使用原始代码可以正常工作
答案 1 :(得分:-1)
我一直看到null。
和
没有它只是空的
提示没有添加到您的用户的项目。您需要具有一些可以填充的ID。
所有填充操作都是将ObjectID转换为文档。 没有任何魔法可以将itemSchema.author
与userSchema.items
同步。
因此,仅将作者添加到项目中是不够的。您还需要将该项目添加到作者。
因此,例如,您可以添加以下项目:
const item = new Item({author: user._id});
await item.save();
req.user.items.push( item );
await req.user.save();
现在,当您登录req.user时,那里有任何项目吗?
一旦看到objectIds,您就可以返回并将.populate('items')
添加到组合中,我保证您可以使用。