我使用貓鼬 findOneAndUpdate 方法,但無法達到結果。我總是得到相同的物件。沒有錯誤。這是我的代碼。用戶物件:
{
"_id" : ObjectId("6273b64b607b1d228795f067"),
"username" : "User1",
"mail" : "[email protected]",
"password" : "$2b$12$NrJ9E8xSz1iCfmIPY0snC.e6x4B/ymqtH.at9uUWaCXTQUwJi1eem",
"messages" : [
{
"message" : "Brand new message",
"date" : 1652508162106.0,
"author" : "User1",
"likes" : []
}
],
"__v" : 16
}
這是我的后端代碼:
const {author} = req.params;
const {mssg, whoLiked} = req.body;
User.findOneAndUpdate({username: author, messages: mssg}, {$push: {likes: whoLiked}}, {new: true}, (err, user)=>{
err && console.log(err);
res.send(user)
})
})
沒有任何更新。也許我試圖以錯誤的方式選擇訊息......我知道,可以一次性完成。但我無法弄清楚。你們說什么?
uj5u.com熱心網友回復:
好的,我終于想通了。這是將喜歡的新人推送到喜歡陣列的代碼。
router.post("/:author/likeThePost", (req,res)=>{
const {author} = req.params;
const {mssg, whoLiked} = req.body;
console.log(mssg, whoLiked);
User.findOneAndUpdate({username: author, "messages.date": mssg.date}, {$push: {"messages.$.likes": whoLiked}}, {new: true}, (err, user)=>{
err && console.log(err);
res.send(user.messages)
})
})
一些評論:
- 我使用貓鼬 findOneAndUpdate 方法。據我所知,有相同的 node.js 方法,但代碼可能不同。
- 讓我們稍微分解一下代碼:
- 首先你找到寫原始訊息的用戶
username: "Some user name" - 然后你通過一些獨特的價值選擇你需要的資訊。在我的情況下,這只是時間戳:
"messages.date": mssg.date。同一用戶不能發布具有相同Date.now()時間戳的兩條訊息。 - 然后你就可以用已經挑選的資訊做你需要的事情了:
{$push: {"messages.$.likes": whoLiked}}第二個美元符號代表挑選正確的資訊。好像是它的索引。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/475999.html
上一篇:明確告訴打字稿一個變數不為空
