我一直在尝试让这个填充的东西发挥作用,但我遇到了问题,因为我没有得到预期的结果,也没有可以处理的错误。只是一个空数组。
我的模型看起来像这样。每个人都有自己的文件
var 猫鼬 = require( '猫鼬' );
var upgradeSchema = new mongoose.Schema({
type: {
type: String,
default: "Any"
},
ability: String,
ability_desc: String,
level: Number,
tag: String
});
mongoose.model('Upgrade', upgradeSchema);
还有另一个
var mongoose = require( 'mongoose' );
var crypto = require('crypto');
var jwt = require('jsonwebtoken');
var userSchema = new mongoose.Schema({
email: {
type: String,
unique: true,
required: true
},
hero: {
level: Number,
name: String,
type: {
path: String,
heroType: String
},
upgrades: [{
type: mongoose.Schema.Types.ObjectId, ref: 'Upgrade'
}],
unspent_xp: Number,
total_xp: Number,
},
armyTotal: {
type: Number,
default: 0,
max: 5000
},
army:[{
foc_slot: String,
unit_name: String,
unit_cost: Number
}],
username: {
type: String,
required: true,
unique: true,
},
faction: String,
name: {
type: String,
required: true
},
hash: String,
salt: String,
roles: {
type: String,
default: 'player' }
});
我正在努力做到这一点
module.exports.profileRead = function(req, res) {
User
.findById(req.payload._id)
.populate('hero.upgrades')
.exec(function (err, user) {
if (err){
console.log(err);
} else {
res.status(200).json(user);
console.log("success");
}
});
}
};
这是一个用户的例子
{
"_id" : ObjectId("57b4b56ea03757e12c94826e"),
"hash" : "76",
"salt" : "2",
"hero" : {
"upgrades" : [
"57b42773f7cac42a21fb03f9"
],
"total_xp" : 0,
"unspent_xp" : 0,
"type" : {
"heroType" : "Psyker",
"path" : ""
},
"name" : "Jon Doe"
},
"username" : "michaelzmyers",
"faction" : "Grey Knights",
"email" : "[email protected]",
"name" : "Michael Myers",
"roles" : "player",
"army" : [],
"armyTotal" : 625,
"__v" : 3
}
现在,我尝试了一个仅包含 ObjectId 的字符串数组,与示例类似,并且我也尝试过使用 ObjectId("STRINGHERE") 但没有成功。它们都只返回一个空数组。但是,如果我摆脱 populate 调用(或将 populate 中的内容从 Hero.upgrades 更改为 Hero 或 Upgrades),那么它只会返回一个字符串数组。我觉得问题在于填充以及我如何使用它。然而,当我在数据库中进行一次升级(测试升级)时,一切都工作正常。现在什么都不起作用了。有什么想法吗?如果需要,我很乐意提供更多代码。
我发现在我的小研究中它会起作用:
User
.findById(req.payload._id)
.populate({
path: 'hero.upgrades',
model: 'Upgrade'
})
.exec(function (err, user) {
if (err){
console.log(err);
} else {
res.status(200).json(user);
console.log("success");
}
});
}
看起来当用户在
hero.upgrades
方法中提供嵌套对象符号(即 populate
)时,Mongoose 在检测引用模型时遇到问题。
我也得到了同样的结果。我的问题是当我“发布”/创建对象时。我做了常规的
const orderLine = new OrderLine({object})
但我忘记了
await orderLine.save()
检查你的帖子。