これは非常に奇妙です... ref を指定して populate() を使用してスキーマ内の配列を埋めていますが、プロパティにアクセスできません。つまり、スキーマは次のようになります。
new Model('User',{
'name': String,
'installations': [ {type: String, ref: 'Installations'} ],
'count': Number,
}
もちろん、Insallations は別のモデルです。
次に、一連のユーザーを見つけて入力します...
model.find({count: 0}).populate('installations').exec( function(e, d){
for(var k in d)
{
var user = d[k];
for(var i in user.installations)
{
console.log(user.installations[i]);
}
}
} );
ここまでは順調ですね!次のように、素敵なデータが出力されます。
{ runs: 49,
hardware: 'macbookpro10,1/x86_64',
mode: 'debug',
version: '0.1' }
ただし、これらのプロパティのいずれかに実際にアクセスしようとすると、それらはすべて未定義です! たとえば、別のコンソール ログを追加すると、次のようになります。
console.log(user.installations[i].mode);
次に、このログに「未定義」と表示されます。オブジェクトを操作しようとすると、次のようになります。
Object.keys(user.installations[i]).forEach(function(key) { } );
次に、典型的な「[TypeError: Object.keys called on non-object]」エラーが発生し、user.installations[i] がオブジェクトではないことを示します (コンソールにはオブジェクトであるかのように出力されますが)。だから、私も醜いことを試しました...
var install = JSON.parse(JSON.stringify(user.installations[i]));
console.log(install, install.mode);
また、最初の出力 (インストール) はプロパティ「モード」を含む素敵なオブジェクトですが、2 番目の出力は未定義です。
何を与える?