首页 > 解决方案 > 我面临在猫鼬中链接 .populate() 方法的问题

问题描述

这是我的用户架构,我将地址作为数组

 name: {
    type: String,
    unique: true,
    require: true
  },
  email: {
    type: String,
    trim: true,
    lowercase: true,
    unique: true,
    required: "Email address is required"
  },
  password: {
    type: String,
    required: true,
    min: [6, "Password must be atlest 6 characters length"]
  },
  mobile: {
    type: String,
    required: true,
    unique: true
  },
  image: {
    type: String,
    default: "gravatar.png"
  },
  addresses: [
    {
      type: mongoose.Schema.Types.ObjectId,
      ref: "Address"
    }
  ],
  cart: [
    {
      type: mongoose.Schema.Types.ObjectId,
      ref: "Cart"
    }
  ],
  orderHistory: [
    {
      type: mongoose.Schema.Types.ObjectId,
      ref: "OrderHistory"
    }
  ]
});

这是对 /user/address 路由的发布请求,我想在其中创建一个新地址,链接用户集合和地址集合并填充用户集合。但它给了我一个错误“TypeError: Address.create(...).then(...).populate is not a function”。我还使用了 exec() 方法。我认为我没有正确使用填充和执行方法。

router.post("/address", function(req, res) {
  console.log("form data: ", req.body);
  Address.create(req.body)

    .then(function(newAddr) {
      // console.log(newAddr);
      return User.findByIdAndUpdate(
        { _id: req.session.user._id },
        { $push: { addresses: newAddr._id } },
        { new: true }
      );
    })
     .populate("addresses")
    // .exec((err, updatedUser) => {
    //   if (err) {
    //     res.send(err);
    //   } else {
    //     console.log(updatedUser);
    //     res.redirect("/user");
    //   }
    // });
    .then(function(updatedUser) {
      res.redirect("/user");
    })

    .catch(err => {
      res.send(err);
    });
});

标签: node.jsexpressmongoosepromisemongoose-populate

解决方案


推荐阅读