#javascript #node.js #mongodb #mongoose
#javascript #node.js #mongodb #mongoose
Вопрос:
Я пишу mongoose в Node.js , ES6.
Сначала я указал модель с именем Address
, и хотел бы использовать Address
модель в определении другой модели, Channel
.
Коды выглядят следующим образом:
// Определение Address
import mongoose from 'mongoose';
export const Address = mongoose.model('Address',
{
id: mongoose.SchemaTypes.ObjectId,
customer_id: String,
addresses: [{
address_type: String,
address_info: String,
}]
});
Для другой модели Channel
я хотел бы иметь subscriber
поле, представляющее собой список Address
.
Мой предварительный код выглядит следующим образом:
import mongoose from 'mongoose';
import {Address} from './Address.js';
export const Channel = mongoose.model('Channel',
{
id: mongoose.SchemaTypes.ObjectId,
name: String,
path: String,
subscribers: [Address],
});
Однако я получил ошибку, подобную этой:
TypeError: Invalid schema configuration: `model` is not a valid type within the array `subscribers`
Интересно, как мне реализовать эту идею в NodeJS?
Комментарии:
1. вам нужен адрес или массив адресов, специфичных для каждого канала?
2. @Ako Массив адресов. Спасибо!!
Ответ №1:
Если я правильно понял, вы хотите, чтобы для каждого канала был указан массив адресов. таким образом, вы должны указать поле адреса в своем канале таким образом:
import mongoose from 'mongoose';
//import {Address} from './Address.js';
export const Channel = mongoose.model('Channel',
{
id: mongoose.Schema.Types.ObjectId,
name: String,
path: String,
subscribers: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Address'
}],
});
вам не нужно импортировать модель адреса в вашу модель канала, MongoDB распознает ее автоматически. затем, когда вы захотите создать документ канала, создайте его следующим образом:
import {Address} from './Address';
import {Channel} from './Channel';
async function createChannel(){
Channel.create({
name: 'theName',
path: 'thePath',
subscribers: [await Address.find()] //you can add all addresses by just use find or use your specific query to find your favored addresses.
})
}
Комментарии:
1. если вы используете экспорт по умолчанию, то вам не нужно это {} вокруг импортируемого объекта.
2. Большое спасибо! Должно ли это быть
ref: 'Address'
, поскольку в определении моделиAddress
я использую заглавную букву? Спасибо3. да, это должно быть
ref: 'Address'
с большой буквы, моя вина, извините. Я редактирую свой ответ. если это ответит на ваш вопрос, я буду рад, если вы примете его в качестве ответа.