![](/img/trans.png)
[英]How to get the connected objects within a collection in an array in Mongoose MongoDb NodeJS
[英]Mongoose - How to update all objects within an array in MongoDB?
我正在創建一個應用程序,我想在其中切換一個人的默認地址。
我的用戶架構包含一個字段,它是一個作為對象的交付地址數組。
其中一個字段是isDefault
,這是我想要從 true 切換到 false 的 defaultAddress 字段,反之亦然。
具體來說,如果用戶更改了他們的默認地址,我想將其余地址設置為 false 並更新他/她選擇的地址為 true
用戶架構
const UserSchema = Schema({
email: {
type: String,
required: true,
},
deliveryAddresses: [deliverySchema]
送貨地址架構
{
id: {
type: Schema.Types.ObjectId,
required: true
},
isDefault: {
type: Boolean,
required: true,
default: false,
},
name: {
type: String,
},
email: {
type: String,
},
phone: {
type: String,
},
}
為此,我到目前為止所做的是:
獲取用戶的電子郵件。
從將切換為 true 的用戶那里獲取送貨地址的 ID。
exports.setDefault = (req, res, next) => {
const email = req.body.email;
const id = req.body.id;
User.findOne({ email: email })
.then((user) => {
let addresses = [...user.deliveryAddresses];
addresses.forEach((address) => {
address.isDefault = false;
});
const index = addresses.findIndex((address)=> {
return address.id.toString() === id.toString();
});
addresses[index].isDefault = true;
user.deliveryAddresses = addresses;
return user.save();
})
.then((doc) => {
res.status(200).json({
user: doc,
statusCode: "200",
msg: "Address updated successfully",
});
})
.catch((err) => {
res.status(500).json({
statusCode: 500,
error: err,
msg: "Something went wrong",
});
});
};
但是,在完成所有這些之后,在郵遞員上測試我的 api 時,它似乎可以工作,沒有錯誤。 但是在檢查數據庫時,沒有任何變化。
我不知道我做錯了什么。
貓鼬很奇怪。 您需要將deliveryAddresses
子對象標記為已修改,否則將不會保存其更改。
user.markModified('deliveryAddresses');
user.save();
來自貓鼬常見問題解答
“Mongoose 不會為數組索引創建 getter/setter;沒有它們,mongoose 永遠不會收到更改通知,因此不知道保留新值。有兩種解決方法:MongooseArray#set 或 Document#markModified()。”
你能試試嗎
user.markModified('deliveryAddresses');
user.save();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.