MongoDb:Mongoose将不同集合中的元素添加到另一个集合中

时间:2018-05-02 15:28:02

标签: node.js mongodb mongoose database-schema

我是MongoDb的新手,并且一直在使用mongoose作为后端。不幸的是我遇到了这个问题,我希望ItemModel中的元素在CartModel中作为数组出现,用户可以删除并向该购物车添加更多项目。

这是我的CartModel代码:

linkPage

这是我的ItemModel:

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

const ItemModel = mongoose.model('Item');
//cart id
//cart name
//cart total cost
//cart items
let cartSchema = new Schema(
    {
       cartId :{
           type:String,
           unique:true
       },
       cartName:{
           type:String,
           default:'Item Cart'
       },
       items:[{type:Schema.Types.ObjectId, ref:'Item'}]
    }
);

mongoose.model('Cart',cartSchema);

这是控制器方法:

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

const defaultString = "NOT ASSIGNED";

let itemSchema = new Schema(
    {
        itemId :{
            type:String,
            unique : true
        },
        itemName : {
            type: String,
            default : defaultString
        },
        description : {
            type : String,
            default : defaultString
        },
        soldBy : {
            type : String,
            default : defaultString
        },
        cost : {
            type : Number,
            default : 0
        },
        rating : {
            type : Number,
            default : 1
        },
        category:{
            type : String,
            default : defaultString
        }

    }
);

mongoose.model('Item',itemSchema);

请提供帮助,并提前致谢

1 个答案:

答案 0 :(得分:0)

所以你可以在这里做的是根据objectId或类似itemid或其他任何东西来映射这两个集合 购物车中可以有多个商品,但反过来却不可能,所以

  

一对多关系

这是一个Cart和许多Item所以您可以做的是在项目中给出cartId然后它会告诉该项目在结帐时属于哪个购物车所以包括cartid然后多个项目可以拥有相同的Cartid 您现在可以使用

将所有项目检索为数组
 ItemModel.findOne({
        'CartId': req.params.CartId
    }, (err, result) => {
                return result.json();
      }