заполнить встраивать массив мангуста 5.0. Вложенный реф - PullRequest
0 голосов
/ 02 мая 2018

Это первая модель. Он находится в папке models / user.js

'use strict'

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

    var UserSchema = Schema({

        publications: [{
            description: String,
            categories: [{
                type: Schema.Types.ObjectId,
                ref: 'Category.subcategories'
            }]
    }]

Модельная категория. Он находится в папке models / category.js

'use strict'

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

    var CategorySchema = Schema({
        name: String,
        subcategories: [{
            name: String
        }]
    });

Посмотрите, что в UserSchema есть категории. У этого есть эта ссылка:

ref: 'Category.subcategories'

У меня есть папка с именем controller. Следующий json из контроллера / category.js

'use strict'

var Categories = require('./models/category');


    function getCategories(req, res){

        Categories.find({},(err, categories) =>{
            if(err){
                res.status(500).send({ message: 'Error en la peticion' });
                return;   
            }

            if(!categories){
                res.status(404).send({ message: 'No hay categories' });
                return
            }

            res.status(200).send({ categories });
        });
    }


    module.exports = {
        getCategories
    }

JSON категории выглядит следующим образом.

{
    "categories": [
        {
            "subcategories": [
                {
                    "_id": "5ae4a8b0a7510e3bd80917db",
                    "name": "subcategory1"
                },
                {
                    "_id": "5ae4a8b0a7510e3bd80917da",
                    "name": "subcategory2"
                },
                {
                    "_id": "5ae4a8b0a7510e3bd80917d9",
                    "name": "subcategory3"
                }
            ],
            "_id": "5ae4a8b0a7510e3bd80917d7",
            "name": "Category1",
            "__v": 0
        },
        {
            "subcategories": [
                {
                    "_id": "5ae4a8b0a7510e3bd80917e0",
                    "name": "subcategory1"
                },
                {
                    "_id": "5ae4a8b0a7510e3bd80917df",
                    "name": "subcategory2"
                }
            ],
            "_id": "5ae4a8b0a7510e3bd80917dc",
            "name": "Category2",
            "__v": 0
        }
    ]
}

Каждая подкатегория2 принадлежит одной категории.

Этот находится в controller / user.js

Пользователь без заполнения будет выглядеть так

        User.find({}, (err, publications) => {
                if (err) {
                    res.status(500).send({
                        message: "Error en la peticion " + err
                    });
                    return;
                }

                if (!publications) {
                    res.status(404).send({
                        message: "Publicacion no encontrada"
                    });
                    return;
                }

res.status(200).send(publications);

результат

"publications": [
            {
                "description": "abc",
                "categories": [
                    "5ae4a8b0a7510e3bd80917db",
                    "5ae4a8b0a7510e3bd80917da"
                ]

            },
            {
                "description": "abcddvas asa",
                "categories": [
                    "5ae4a8b0a7510e3bd80917e0"
                ]                
            },
]

Мне нужно заполнить категории, когда я это сделаю.

User.find().populate('publications.categories').then(function (err, posa) {
            if (err) {
                res.status(500).send(err);
                return;
            }
            res.status(500).send(posa);
            return;
        });

Итак, окончательный JSON должен выглядеть так:

"publications": [
                {
                    "description": "abc",
                    "categories": [
                        {
                          "_id": "5ae4a8b0a7510e3bd80917db",
                          "name": "subcategory1"
                        },
                        {
                           "_id": "5ae4a8b0a7510e3bd80917da",
                           "name": "subcategory2"
                        }
                    ]

                },
                {
                    "description": "abcddvas asa",
                    "categories": [
                        {
                           "_id": "5ae4a8b0a7510e3bd80917e0",
                           "name": "subcategory1"
                        }
                    ]                
                },
    ]

Но результат не показывает мне окончательный JSON.

Я вижу, что есть опция, которая называется Динамические ссылки. http://mongoosejs.com/docs/populate.html

Пример показывает это

var userSchema = new Schema({
  name: String,
  connections: [{
    kind: String,
    item: { type: ObjectId, refPath: 'connections.kind' }
  }]
});

Вместо использования ref использует refPath. Но для меня это не сработало.

Я пытался использовать это

https://github.com/buunguyen/mongoose-deep-populate

но это не сработало для меня.

Я пытался сделать много попыток. Никто не работает для меня. Я искал дни и пробовал много вещей, но я не смог решить эту проблему.

...