You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB数据库中无法查看订单商品quantity字段问题求助

问题根源

你的Mongoose Schema里clothes和shoes数组的子结构定义错误——你把type: Schema.Types.ObjectId和quantity字段平级放置,这会让Mongoose将整个子元素识别为ObjectId类型,而非包含quantity和关联ID的嵌套对象,最终只存储关联的_id,丢弃了quantity字段。

修复方法

调整Schema结构,明确子文档包含quantity和关联ID两个字段:

修正后的Order Schema

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

const orderSchema = new Schema({
  user: {
    type: Schema.Types.ObjectId,
    ref: "User",
  },
  clothes: [
    {
      quantity: { type: Number, required: true },
      _id: { type: Schema.Types.ObjectId, ref: "Clothe" }
    },
  ],
  shoes: [
    {
      quantity: { type: Number, required: true },
      _id: { type: Schema.Types.ObjectId, ref: "Shoe" }
    },
  ],
  confirmOrder: Boolean,
});

module.exports = mongoose.model("Order", orderSchema);

如果你不想用_id作为关联字段名,也可以改用itemId,同时对应调整数据插入代码:

备选Schema(使用itemId)

const orderSchema = new Schema({
  user: {
    type: Schema.Types.ObjectId,
    ref: "User",
  },
  clothes: [
    {
      quantity: { type: Number, required: true },
      itemId: { type: Schema.Types.ObjectId, ref: "Clothe" }
    },
  ],
  shoes: [
    {
      quantity: { type: Number, required: true },
      itemId: { type: Schema.Types.ObjectId, ref: "Shoe" }
    },
  ],
  confirmOrder: Boolean,
});

对应的数据插入代码调整

const order = new Order({
  user: "5f2a57ed2a86fd47f48b2f0c",
  clothes: [
    {
      quantity: 2,
      itemId: "5f2a58df2a86fd47f48b2f0d",
    },
  ],
  shoes: [
    {
      quantity: 1,
      itemId: "5f2a58df2a86fd47f48b2f0e",
    },
  ],
  confirmOrder: false,
});

order.save((error) => {
  if (error) {
    console.error(error);
  } else {
    console.log("Order saved successfully");
  }
});
验证

修改Schema后重新运行插入代码,MongoDB中就能正常显示每个商品的quantity字段和对应的关联ID了。

内容的提问来源于stack exchange,提问作者Impra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:20:55