关于如何用Mongoose创建关系的简单解释

时间:2015-11-09 23:22:32

标签: javascript json node.js mongodb mongoose

我是Mongo db / Mongoose的新手,这个问题是关于mongoose和集合之间的关系,我知道有很多关于如何使这项工作的教程,但仍然无法理解一个简单的方法来做到这一点工作。我有两个型号:

这是主要模式:

       'use strict';

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

                var CategorySchema = new Schema({
                    name    : String,
                    info    : String,
                    items   : [{ type: Schema.Types.ObjectId, ref: 'Item' }]
                });

                var itemsSchema = Schema({
                    name        : String,
                    description : String,
                    price       : Number
                });


        var Item  = mongoose.model('Item', itemsSchema);

        module.exports = mongoose.model('Category', CategorySchema);

我需要在类别集合中填充items数组,并在两个集合之间创建关系。

当我从邮递员那里发帖后,我可以看到物品数组被创建但我无法填充数组。

如果我确实得到了类别,这就是回复:

  [
        {
          "_id": "564120be4123198a1f93feb5",
          "name": "Classic",
          "info": "this is the info",
          "__v": 0,
          "items": []
        },
        {
          "_id": "5641220b02968e901f678ff5",
          "name": "Classic",
          "info": "this is the info",
          "__v": 0,
          "items": []
        }
      ]

这是api / categories /

的放置结果
     {
        "_id": "564120be4123198a1f93feb5",
        "name": "test again",
        "info": "this is the info",
        "__v": 1,
        "items": []
      }

期望的输出:

      {
        "_id": "564120be4123198a1f93feb5",
        "name": "test again",
        "info": "this is the info",
        "__v": 1,
        "items": [
          {
            "_id": "some id"
            "name": "name",
            "description": "lorem ipsup"
          },
          {
            "_id": "some id"
            "name": "name",
            "description": "lorem ipsup"
          },
          {
            "_id": "some id"
            "name": "name",
            "description": "lorem ipsup"
          },
        ]
      }

1 个答案:

答案 0 :(得分:0)

即使您在类别中有引用,也应使用populate方法通知mongoose您希望他检索引用的项目。

类似的东西:

var Category = require('./category.model'); 
Category.find().populate("items");

如果您只想填充项目模型的一个字段,可以将其添加到populate的参数:

Category.find().populate("items","name");

我不知道你想要实现什么,但在我看来,另一种方式可能更有益(将类别引用到项目模型中)。