【问题标题】:can't get the user's address in mongoose / nodejsmongoose/nodejs中无法获取用户地址
【发布时间】:2021-05-16 06:20:45
【问题描述】:

当应用程序加载时,它从后端获取对象的 initialData 数组,其中我有我需要的所有信息,如类别、订单、产品等。在订单数组中,我有关于用户订购商品、状态等的所有信息.我想加载用户地址,当他填写地址表格时,我将该地址存储在address.js-> UserAddress模型/模式中。所以我想在订单数组中加载用户地址。 请帮我获取订单数组中的用户地址,以便我可以在我的管理应用程序->订单卡中显示用户地址,我是新手,所以我无法自己弄清楚。

这是我的 orderSchema

    const orderSchema = new mongoose.Schema(
  {
    user: {
      type: mongoose.Schema.Types.ObjectId,
      ref: "User",
      required: true,
    },
    addressId: {
      type: mongoose.Schema.Types.ObjectId,
      ref: "UserAddress.address",
      required: true,
    },
    totalAmount: {
      type: Number,
      required: true,
    },
    items: [
      {
        productId: {
          type: mongoose.Schema.Types.ObjectId,
          ref: "Product",
        },
        payablePrice: {
          type: Number,
          required: true,
        },
        purchasedQty: {
          type: Number,
          required: true,
        },
      },
    ],
    paymentStatus: {
      type: String,
      enum: ["pending", "completed", "cancelled", "refund"],
      required: true,
    },
    paymentType: {
      type: String,
      enum: ["cod", "card"],
      required: true,
    },
    orderStatus: [
      {
        type: {
          type: String,
          enum: ["ordered", "packed", "shipped", "delivered"],
          default: "ordered",
        },
        date: {
          type: Date,
        },
        isCompleted: {
          type: Boolean,
          default: false,
        },
      },
    ],
  },
  { timestamps: true }
);

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

这是我的地址架构:

const addressSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true,
    trim: true,
    min: 3,
    max: 50,
  },
  mobileNumber: {
    type: String,
    required: true,
    trim: true,
  },
  pinCode: {
    type: String,
    required: true,
    trim: true,
  },
  locality: {
    type: String,
    required: true,
    trim: true,
    min: 10,
    max: 100,
  },
  address: {
    type: String,
    required: true,
    trim: true,
    min: 10,
    max: 100,
  },
  cityDistrictTown: {
    type: String,
    required: true,
    trim: true,
  },
  state: {
    type: String,
    required: true,
    required: true,
  },
  landmark: {
    type: String,
    min: 10,
    max: 100,
  },
  alternatePhone: {
    type: String,
  },
  addressType: {
    type: String,
    required: true,
    enum: ["home", "work"],
    required: true,
  },
});

// B
const userAddressSchema = new mongoose.Schema(
  {
    user: {
      type: mongoose.Schema.Types.ObjectId,
      required: true,
      ref: "User",
    },
    address: [addressSchema],
  },
  { timestamps: true }
);

mongoose.model("Address", addressSchema);
module.exports = mongoose.model("UserAddress", userAddressSchema);

这是获取所有数据/响应的初始数据:

exports.initialData = async (req, res) => {
  const categories = await Category.find({}).exec();

  const products = await Product.find({ createdBy: req.user._id })
    .select("_id name price quantity slug description productPictures category")
    .populate({ path: "category", select: "_id name" })
    .exec();

  const orders = await Order.find({})
    .populate("items.productId", "name")
    .exec();
  res.status(200).json({
    categories: createCategories(categories),
    products,
    orders,
  });
};

这是初始数据的响应:

【问题讨论】:

    标签: javascript node.js reactjs mongodb mongoose


    【解决方案1】:

    您可以简单地使用从订单模式到地址模式的$lookup 聚合,通过user 字段获取用户的地址。

    更多关于 MongoDb 的信息 $lookup 聚合 here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-01
      • 2018-04-30
      • 2018-11-17
      • 2020-03-13
      • 2014-09-27
      • 2016-03-14
      相关资源
      最近更新 更多