簡體   English   中英

如何將 $addToSet 與 mongodb 中的對象一起使用?

[英]How do I use $addToSet with objects in mongodb?

我只想使用$addToSet將唯一對象推送到數組中。

我的userSchema有一個字段bankDetails應該包含一個對象數組:

const userSchema = new mongoose.Schema(
  {
    bankDetails: [
      {
        cardHolder: String,
        cardNumber: String,
        expiry: String,
        cvc: String,
        cardBrand: String,
      },
    ]
  }
)

我正在使用以下 controller function 更新架構:

exports.createPayment = async (req, res) => {
  const { user, cardHolder, cardNumber, expiry, cvc, cardBrand } = req.body
  const saveDetails = await User.findByIdAndUpdate(
    { _id: user._id },
    $addToSet: {
      bankDetails: {
        cardHolder,
        cardNumber,
        expiry,
        cvc,
        cardBrand,
      },
    },
    { new: true }
  ).exec();
  res.json(saveDetails);
}

數據保存正確,但 Mongo 每次都會自動生成一個_id字段,因此從技術上講,沒有一個對象是唯一的,並且對象是重復添加的。

有人知道解決方法嗎?

您可以檢查銀行是否已經存在,並僅在不存在時添加:

exports.createPayment = async (req, res) => {
  const { user, cardHolder, cardNumber, expiry, cvc, cardBrand } = req.body;
  const existingBank = await User.findOne({
    'bankDetails.cardHolder': cardHolder,
    'bankDetails.cardNumber': cardNumber,
    'bankDetails.expiry': expiry,
    'bankDetails.cvc': cvc,
    'bankDetails.cardBrand': cardBrand,
  });
  if (existingBank) return res.json(existingBank);
  const saveDetails = await User.findByIdAndUpdate(
    user._id,
    {
      $addToSet: {
        bankDetails: {
          cardHolder,
          cardNumber,
          expiry,
          cvc,
          cardBrand,
        },
      },
    },
    { new: true }
  ).exec();
  res.json(saveDetails);
};

暫無
暫無

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

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