マングース配列の人口に問題があります。私の2つのモデル/スキーマは次のようになります:
終点
// create schema
const schema = new mongoose.Schema({
name: {
type: String,
required: true
},
interface: {
type: ObjectId,
required: true,
ref: "Devices.interfaces"
},
room: {
type: ObjectId,
ref: "Rooms"
}
//commands: []
});
// register model
mongoose.model("Endpoints", schema);
デバイス
// create schema
const schema = new mongoose.Schema({
name: {
type: String,
required: true
},
room: {
type: ObjectId,
ref: "Rooms"
},
interfaces: [{
type: {
type: String,
required: true,
enum: [
"RS232",
"ETHERNET"
]
},
settings: {
//..
}
}]
});
// register model
mongoose.model("Devices", schema);
エンドポイント インターフェイスにデータを入力しようとすると、MissingSchemaError: Schema has not been registered for model "Devices.interfaces"エラーが発生します。
ドキュメント (デバイス)
[
{
"_id": "5d5c0b8268dcf72a24f3e9b9",
"name": "Test - 1",
"interfaces": [
{
"_id": "5d5c0b8268dcf72a24f3e9bb",
"typ": "RS232"
},
{
"_id": "5d5c0b8268dcf72a24f3e9ba",
"typ": "ETHERNET"
}
],
"__v": 0
},
{
"_id": "5d5c0d1fd4fefd1708901d1b",
"name": "Test - 2",
"interfaces": [
{
"_id": "5d5c0d1fd4fefd1708901d1d",
"type": "RS232"
},
{
"_id": "5d5c0d1fd4fefd1708901d1c",
"type": "ETHERNET"
}
],
"__v": 0
}
]
ドキュメント (エンドポイント)
{
"_id": "5d5c0bef68dcf72a24f3e9bc",
"name": "Test - 1",
"interface": "5d5c0d1fd4fefd1708901d1d",
"__v": 0
}
デバイス ドキュメント内の配列に有効なオブジェクト ID がありますが、クエリ作成が正しく機能しないのはなぜですか? 別のスキーマ/モデルを登録せずに、エンドポイント ドキュメントからインターフェイスを照会するにはどうすればよいですか?
デバイス schmea の配列を に変更しようとしましたが、うまくいきませんでしたmongoose.Schema
。同じエラーが発生します。
編集:クエリが追加されました。
const query = model("Endpoints").findOne({
_id: "5d5c0bef68dcf72a24f3e9bc"
});
query.populate([ { path: 'interface', populate: [] } ]);
query.exec((err, doc) => {
// do something
});