如何向對象中的數組添加數據或者刪除數據呢❓增加數據push❓刪除數據delete❓一起來看看吧👇👇👇
增加
如果想往數組中添加對象時最常見的是:循環——>push
,那麼在mongodb中如何操作呢❓先上數據吧:
{
"_id" : ObjectId("5e72cff594c0f607d9060d08"),
"name" : "Anna",
"age" : 20,
"addressInfo" : [
{
"_id" : ObjectId("5e72cff594c0f607d9060d09"),
"name" : "美國",
"tel" : "13809876543"
}
],
"__v" : 0
}
從上面的數據我們可以看到對象中有_id
,name
,age
,addressInfo
等字段,其中addressInfo
是數組,那麼現在向該數組中再加數據該如何操作呢❓👇👇👇我們一起來看看吧——$addToSet
和$push
。
-
$push
返回組內所有值的數組,不去除重複的值。-
實現
router.post('/addTestArr', async (req, res) => { let { _id, address } = { ...req.body }; let data = await Test.findOneAndUpdate({ _id: _id }, { $push: { 'addressInfo': address } },{new:true}); res.json({ data }); })
-
測試
繼續點擊postman裏面的send
按鈕,不修改任何參數的值,看下面的效果:
-
-
$addToSet
爲組裏唯一的值創建一個數組,去除重複的值。-
實現
router.post('/addTestArr', async (req, res) => { let { _id, address } = { ...req.body }; let data = await Test.update({ _id: _id }, { '$addToSet': { //$push 'addressInfo': address } },{new:true}); res.json({ data });
-
測試
繼續點擊postman裏面的send
按鈕,不修改任何參數的值,看下面的效果:從圖中我們可以清晰地看到相同的值在數組中已經存在了不再重複加入,也就是前面說的去重。
-
刪除
同樣是上面的數據,假如現在要刪除addressInfo
數組中的某條數據,首先想到的是不是先循環數組找到要刪除的那條數據後再刪除呢❓嗯,沒錯,大多時候都會這麼做的,但是在mongoose中有個知識點可以根據條件找到直接刪除,而不需要循環刪除,那到底是什麼呢❓—— $pull
-
語法
{ $pull: { <field1>: <value|condition>, <field2>: <value|condition>, ... } }
-
例子
router.delete('/deleteTest', async (req, res) => { let {_id,addressId} = {...req.body}; let data = await Test.update({ _id: _id }, { $pull: { 'addressInfo': { _id: addressId } } }) res.json({ data }); })
-
測試
之後我們看看數據庫中的數據: