[英]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.