Я сталкиваюсь с проблемой с цепочкой метода .populate () в мангусте - PullRequest
0 голосов
/ 11 января 2020

Это моя пользовательская схема, где у меня есть адреса в виде массива

 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 route, где я хочу создать новый адрес, связать коллекцию пользователей и коллекцию адресов и заполнить коллекцию пользователей. Но это дает мне ошибку «TypeError: Address.create (...). Then (...). Заполнить не функция»). Я также использовал метод exe c (). Я думаю, что я не использую метод populate и exe c правильно.

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);
    });
});
...