簡體   English   中英

創建新的貓鼬子文檔並附加到現有的父文檔

[英]Creating new mongoose sub-doc and appending to existing parent doc

我正在使用 NodeJS、MongoDB、Express、Mongoose 等構建一個帶有數據庫的網站。

  1. 我設置了兩個架構:事件和子文檔架構類別(等等)。
  2. 該函數拉入數組,其中包含創建多個類別所需的數據(此位有效)以及附加到末尾的事件 ID。
  3. 下面的前幾位只是獲取該 ID,然后將其從數組中刪除(這可能是一種更好的方法,但同樣有效)。
  4. 如上所述,類別然后正確創建(甚至進行驗證),這是驚人的,但是......
  5. 它們不會附加到事件文檔中。 該文檔將“類別”字段更新為適用數量的“空”值,但我一生都無法讓它實際獲取新創建的類別的 ID。

我從某個地方獲取(並調整)了以下代碼,所以這就是我所在的位置...

     exports.addCategories = catchAsync(async (req, res, next) => {
       const categories = req.body;
       const length = categories.length;
       const eventID = categories[length - 1].eventId;
       categories.pop();

    Event.findOne({ _id: eventID }, (err, event) => {
      if (err) return res.status(400).send(err);
      if (!event)
        return res.status(400).send(new Error("Could not find that event"));

    Category.create(categories, (err, category) => {
      if (err) return res.status(400).send(err);

      event.categories.push(category._id);
      event.save((err) => {
        if (err) return res.status(400).send(err);

        res.status(200).json(category);
        });
      });
     });
    });

目前 mongoose 調試輸出顯示以下內容(這證實了它的大部分工作正常,但 ID 沒有被正確拉出):

> Mongoose: events.updateOne({ _id: ObjectId("614bc221bc067e62e0790875")}, { '$push': { categories: { '$each': [ undefined ] } }, '$inc': { __v: 1 }}, { session: undefined })

沒關系! 我意識到“類別”仍然是一個數組,而不是我假設的類別數組的一個元素。

所以我用這個替換了那個部分,現在......它起作用了!

  Category.create(categories, (err, categories) => {
    if (err) return res.status(400).send(err);

    categories.forEach((category) => {
      event.categories.push(category._id);
    });

    event.save((err) => {
      if (err) return res.status(400).send(err);
    });
  });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM