Я написал несколько скриптов на Python, которые собирают данные из различных источников и выгружают их в MongoDB с использованием Mongoengine в 3 разных коллекциях. Документы (интерфейсы) одной из этих коллекций ссылаются на документы в одной из двух других коллекций (v_machines, p_machines), которые содержат различные схемы данных. Как новичок в nodejs, я не уверен, как разыменовать ссылки при использовании Mongoose.
Я пытался использовать метод populate (), но быстро вернулся со следующей ошибкой:
{
"statusCode": 500,
"error": "Internal Server Error",
"message": "Cast to ObjectId failed for value \"Machine\" at path \"_id\" for model \"interfaces\""
}
Используя GenericReferenceField в MongoEngine, пример схемы выглядит следующим образом:
{
"_id" : ObjectId("8c49db2f45546d3a586877a6"),
"name" : "testbox.blah.com",
"mac_address" : "c4:cc:fa:bd:49:66",
"label" : "eth0",
"machine_reference" : {
"_cls" : "Machine",
"_ref" : {
"$ref" : "p_machines",
"$id" : ObjectId("5c32cb2f46546c4a586877a5")
}
}
}
Это выглядит немного иначе, чем примеры, которые я видел, используя .populate (). Ссылка "_cls" не найдена в моих поисках. Похоже, мне нужно перейти на другой уровень, чтобы получить данные.
В моем js-коде у меня есть модель, определенная как:
const interface_schema = new mongoose.Schema({
id: {type: mongoose.Schema.Types.ObjectId, index: true, required: true},
machine_reference: {type: mongoose.Schema.Types.Mixed, index: true, required: true},
name: {type: String, index: true, required: true},
mac_address: {type: String, required: true},
label: {type: String, required: true},
})
Код запроса здесь:
interfaces.find({ 'name': req.query.name }).populate('machine_reference')
Я хотел бы иметь возможность разыменовать соответствующие документы для обеих коллекций. Как бы я поступил так? Открыты для предложений, даже воссоздания схемы или изменения модели.