Mongoose populate() 返回空数组,没有错误

问题描述 投票:0回答:2

我一直在尝试让这个填充的东西发挥作用,但我遇到了问题,因为我没有得到预期的结果,也没有可以处理的错误。只是一个空数组。

我的模型看起来像这样。每个人都有自己的文件

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),那么它只会返回一个字符串数组。我觉得问题在于填充以及我如何使用它。然而,当我在数据库中进行一次升级(测试升级)时,一切都工作正常。现在什么都不起作用了。有什么想法吗?如果需要,我很乐意提供更多代码。

node.js mongodb mongoose populate
2个回答
25
投票

我发现在我的小研究中它会起作用:

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 在检测引用模型时遇到问题。


0
投票

我也得到了同样的结果。我的问题是当我“发布”/创建对象时。我做了常规的

const orderLine = new OrderLine({object})

但我忘记了

await orderLine.save()

检查你的帖子。

© www.soinside.com 2019 - 2024. All rights reserved.