現在、mongoose v4.10.8
を使用しています。定義済みのモデルに複数の配列を設定しようとしています。mongoose.populate空の配列を返します
TransportModel.js
//Transport model
'use strict';
const mongoose = require('mongoose');
const TransportSchema = new mongoose.Schema({
tag: {
type: String,
enum: ['X', 'Y'],
required: true,
unique: true
},
chairs: [{
type: mongoose.Schema.Types.ObjectId,
ref: "Chair"
}],
targets: [{
type: mongoose.Schema.Types.ObjectId,
ref: "Target"
}]
});
module.exports = mongoose.model('Transport', TransportSchema);
ChairModel.js
//Chair model
'use strict';
const mongoose = require('mongoose');
const ChairSchema = new mongoose.Schema({
product_name: {
type: String,
required: true,
unique: true
},
description: {
type: String,
unique: false,
required: false
}
});
module.exports = mongoose.model('Chair', ChairSchema);
TargetModel.js
//Target model
'use strict';
const mongoose = require('mongoose');
const TargetSchema = new mongoose.Schema({
target_name: {
type: String,
required: true,
unique: true
},
location: {
type: String,
required: true,
unique: false
},
description: {
type: String,
unique: false,
required: false
}
});
module.exports = mongoose.model('Target', TargetSchema);
た後上記の設定では、私はという文書を1つ作成しました。
以下TransportModel.findOne({
tag: 'X'
})
.populate("chairs")
.populate("targets")
.exec(function(err, transport) {
if (err) {
console.error(err);
}
console.log('Transport: ', transport);
});
});
が検索された文書である:
はその後、私は単一Transport
文書を取得するためにルート上の次のロジックを呼び出す私が照会にもかかわらず、このよう
{
"_id": "xxxx9999xxxx9999xxxx9999",
"tag": "X",
"__v": 1,
"chairs": [],
"targets": []
}
をChairs
し、 Targets
コレクションで、少なくとも1つのドキュメントがあると、Transport
ドキュメントにデータが読み込まれません。
はさらに、私はまた、.populate()
の強化版を試してみましたが、私は空の配列を取得しておいてください。
.populate({
path: "chairs",
model: "Chair"
})
.populate({
path: "targets",
model: "Target"
})
どのように 'TransportModel'文書に' Chair'と 'Target'のドキュメントを追加しましたか? – robertklep
返信いただきありがとうございます、@robertklep。それは私が '.populate()'で達成しようとしているものです。私は '' Chair''と '' Target''の利用可能なリストのすべてを自動的に読み込む '' Transport'文書の ''椅子 ''と '' targets'配列それぞれのコレクションからの文書。 –
それは人口とは異なります。これは、コレクション間で特定のドキュメントを関連付ける手段です。言い換えれば、新しい 'Chair'文書を' TransportModel'文書に手動で関連付ける必要があります。 '.populate()'メソッドは、クエリ中に自動的に関連ドキュメントを追加します。以下のドキュメントを参照してください。http://mongoosejs.com/docs/populate.html – robertklep