Javascript 关于如何与猫鼬建立关系的简单说明

Javascript 关于如何与猫鼬建立关系的简单说明,javascript,json,node.js,mongodb,mongoose,Javascript,Json,Node.js,Mongodb,Mongoose,我是Mongo db/Mongoose的新手,这个问题是关于Mongoose和集合之间的关系的,我知道有很多关于如何实现这一点的教程,但仍然无法理解实现这一点的简单方法。我有两个模型: 这是主要模型: 'use strict'; var mongoose = require('mongoose'), Schema = mongoose.Schema; var CategorySchema = new Sch

我是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);
我需要在category集合中填充items数组,并创建两个集合之间的关系

当我从邮递员那里收到一篇文章时,我可以看到正在创建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/类别的放置结果/

     {
        "_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"
          },
        ]
      }

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

比如:

var Category=require('./Category.model');
Category.find().填充(“项”);
如果只想填充项目模型的一个字段,可以将其添加到“填充”的参数中:

Category.find().填充(“项目”、“名称”);

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

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

比如:

var Category=require('./Category.model');
Category.find().填充(“项”);
如果只想填充项目模型的一个字段,可以将其添加到“填充”的参数中:

Category.find().填充(“项目”、“名称”);

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

您使用什么逻辑将项目插入类别?@KevinB我需要将来能够删除单个项目。您使用什么逻辑将项目插入类别?如果它工作正常,您应该在该数组中看到一个id。我没有看到任何ID。@KevinB我无法在数组中获得任何ID。我遵循以下文档“我无法在阵列中获取任何ID”,这正是我试图指出的。如果数组中没有可填充的内容,则填充将不会填充任何内容!目前它是空的,所以。填充不会改变它。对于。填充要工作,数组需要包含属于该类别的项目ID。您使用什么逻辑将项目插入该类别?@KevinB我需要将来能够删除单个项目。您使用什么逻辑将项目插入该类别?如果它工作正常,您应该在该数组中看到一个id。我没有看到任何ID。@KevinB我无法在数组中获得任何ID。我遵循以下文档“我无法在阵列中获取任何ID”,这正是我试图指出的。如果数组中没有可填充的内容,则填充将不会填充任何内容!目前它是空的,所以。填充不会改变它。填充数组需要包含属于该类别的项ID。