首页 > 解决方案 > 使用 Mongoose 将在线购物车项目插入 MongoDB

问题描述

我正在尝试使用猫鼬模式将一车物品作为 JSON 对象插入到 MongoDB 集合中。

正在存储客户的 ID(来自用户数据库),但购物车项目不是. 这是我的代码:

本地变量 app.js 中包含的示例订单数据称为cartData: { data:[] }

{
    data: [
      item {
        name: "Product Name 1",
        price: '2.99',
        sku: '13579',
        count: 8
      },
      item {
        name: 'Product Name 2',
        price: '21.99',
        sku: '24680',
        count: 2
      }
    ]
}

Cart.js(购物车模式):

const mongoose = require("mongoose")

const CartSchema = new mongoose.Schema({
    customerID: {
        type: String,
        required: true
    },
    cartContents: {
        type: [Object]
    },
    date: {
        type: Date,
        default: Date.now
    }
}, { collection: "ordersDB" })

const Cart = mongoose.model('Cart', CartSchema)
module.exports = Cart

app.js(订单提交代码):

const Cart = require("../models/Cart")
const customerID = req.user.customerID //Acquired from user database

const newOrder = new Cart({
    customerID,
    cartData
})
newOrder.save()
    .then(customer => {
        req.flash("successful", "Your order has been submitted!")
        res.redirect("/somepage")
    })
    .catch(err => console.log(err))

结果:

_id: abcd1234
> cart: Object
    > type: Array
        > <The Infinite Abyss Of Nothingness aka Empty>
customerID: "1234567890"
date: 2019-12-11T21:14:40.825+00:00
__v: 0

对此问题的任何见解将不胜感激。

标签: javascriptnode.jsjsonmongodbmongoose

解决方案


基于提供的模式 Mongoose 期望您传递一个名为cartContents. 与您的架构不兼容的任何其他字段都将被忽略。要解决这个问题,只需明确命名您的字段:

const newOrder = new Cart({
    customerID,
    cartContents: cartData
})

推荐阅读