2016-08-17 14 views
2

私はこのpopulateを動作させようとしてきましたが、予想される結果を得ることができず、動作するエラーもないので問題が発生しています。単に空の配列です。Mongoose populate()はエラーのない空の配列を返します

私のモデルはこのように見えます。それぞれ独自のファイル

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 protected]", 
    "name" : "Michael Myers", 
    "roles" : "player", 
    "army" : [], 
    "armyTotal" : 625, 
    "__v" : 3 
} 

今のユーザーの一例であるやろうとしている、私は」オブジェクトIDが入った文字列の配列を試しましたが、si私はまた、ObjectId( "STRINGHERE")と運を使用して試してみました。それらはどちらも空の配列を返します。しかし、私が大量の呼び出しを取り除いた場合(あるいはhero.upgradesからpopulateの内容をヒーローやアップグレードに変更した場合)、文字列の配列が返されます。私は問題が人口とどのように私はそれを使用しているように感じる。しかし、私のデータベース(テストのアップグレード)でただ一つのアップグレードがあっただけで、すべて正常に動作しました。今は何も動かない。何かご意見は?必要に応じてより多くのコードを提供できることを嬉しく思います。

答えて

2

私はそれが動作することを私の少し研究中にいることが見つかりました:

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"); 
    } 
    }); 
} 

これは、ユーザーがpopulateメソッドにネストされたオブジェクトの表記法、すなわちhero.upgradesを与えているときのように見える、マングースは、参照モデルの検出の問題を得ました。

+0

ありがとう –

+0

ご参考までに;) – kkochanski

+0

この問題は、複数のファイルにまたがってスキーマを定義することによって発生していると思われます。 –

関連する問題