我只是無法弄清楚查詢,即使允許撰寫單個查詢將 4 個不同的物件推送到深深嵌套在用戶物件內的 4 個不同的陣列中。
我從前端收到 PATCH 請求,其正文如下所示:
{
bodyweight: 80,
waist: 60,
biceps: 20,
benchpress: 50,
timestamp: 1645996168125
}
我想創建 4 個物件并將它們推送到 Mongo Atlas 中的用戶資料中
{date:1645996168125, value:80}進入user.stats.bodyweight<-array
{date:1645996168125, value:60}進入user.stats.waist<-array
...等等
我試圖找出第二個論點:
let user = await User.findOneAndUpdate({id:req.params.id}, ???)
但如果可能的話,我很樂意用任何其他貓鼬方法更新它。
PS:我不是故意使用_idmongoDB給出的
uj5u.com熱心網友回復:
您將需要使用$push運算子。它接受路徑作為欄位名稱,因此您可以指定每個陣列的路徑。
我假設您的請求中包含的欄位是固定的(每個請求都有相同的四個屬性名稱/陣列)
let user = await User.findOneAndUpdate(
{ id: req.params.id },
{
$push: {
"stats.bodyweight": {
date: 1645996168125,
value: 80,
},
"stats.waist": {
date: 1645996168125,
value: 60,
},
// ...
},
}
);
如果欄位是動態的,請使用物件和 if 條件,如下所示:
const update = {};
if ("bodyweight" in req.body) {
update["stats.bodyweight"] = {
date: 1645996168125,
value: 80,
};
}
// ...
let user = await User.findOneAndUpdate(
{ id: req.params.id },
{
$push: update,
}
);
if 條件只是為了演示原理,您可能希望使用更嚴格的型別檢查/驗證。
uj5u.com熱心網友回復:
嘗試這個:
await User.findOneAndUpdate(
{id:req.params.id},
{$addToSet:
{"stats.bodyweight":{date:1645996168125, value:80} }
}
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/437083.html
