Как разыменовать объект, созданный Mongoengine с помощью Mongoose? - PullRequest
0 голосов
/ 12 января 2019

Я написал несколько скриптов на 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')

Я хотел бы иметь возможность разыменовать соответствующие документы для обеих коллекций. Как бы я поступил так? Открыты для предложений, даже воссоздания схемы или изменения модели.

1 Ответ

0 голосов
/ 12 января 2019

В вашей схеме нужно изменить этот тип:

machine_reference: {type: mongoose.Schema.Types.ObjectId, index: true, required: true, ref:'name of the model'}

Будьте внимательны в части ref, это должно быть имя, которое вы дали схеме станка, например. Машина. Не забудьте заключить его в кавычки. Надеюсь, что это решит проблему.

...