Mongoose populate() 返回没有错误的空数组
Posted
技术标签:
【中文标题】Mongoose populate() 返回没有错误的空数组【英文标题】:Mongoose populate() returns empty array with no errors 【发布时间】:2016-12-24 14:37:55 【问题描述】:我一直试图让这个填充的东西工作,但我遇到了问题,因为我没有得到预期的结果,也没有错误可以处理。只是一个空数组。
我的模型看起来像这样。每个人都有自己的文件
var mongoose = require('mongoose');
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@gmail.com",
"name" : "Michael Myers",
"roles" : "player",
"army" : [],
"armyTotal" : 625,
"__v" : 3
现在,我尝试了一个仅包含 ObjectId 的字符串的数组,类似于示例,我也尝试过使用 ObjectId("STRINGHERE") 并且没有运气。它们都只返回一个空数组。但是,如果我摆脱 populate 调用(或将 populate 中的内容从 hero.upgrades 更改为只是 hero 或 upgrades),那么它只会返回一个字符串数组。我觉得问题在于填充以及我如何使用它。但是,当我在数据库中只进行一次升级(测试升级)时,一切正常。现在没有任何效果。有什么想法吗?如果需要,我很乐意提供更多代码。
【问题讨论】:
【参考方案1】:在我的小研究中发现它会起作用:
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 在检测引用模型时遇到了问题。
【讨论】:
我怀疑这个问题是由跨多个文件定义模式引起的。以上是关于Mongoose populate() 返回没有错误的空数组的主要内容,如果未能解决你的问题,请参考以下文章
Model.populate() 不是 Mongoose 中的返回文档