0

这是第一个模型。它位于名为 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'

我有一个名为控制器的文件夹。下一个 json 来自 controller/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
    }

Category 的 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

但这对我不起作用。

我尝试了很多尝试。没有一个对我有用。我一直在寻找几天并尝试了很多事情,但我无法解决这个问题。

4

0 回答 0