![](/img/trans.png)
[英]Is there a way to update multiple documents with different values in mongoose?
[英]How update any matching in array multiple times in multiple documents on Mongoose model and not only first?
所以我有一個聊天的model。
const Schema = mongoose.Schema;
const chatSchema = mongoose.Schema({
id : {type: String, required: true, unique: true},
email1 : String,
email2 : String,
avasrc1 : String,
avasrc2 : String,
lastMessage : String,
lastMsgTime : String,
messages : [{email: String, name: String, avasrc: String, msg: String, msgTime: String}]
});
在服務器中,我想將化身來源更改為 email 是否匹配 email。 於是我試了...
await Chat.update({email1: email}, {$set: {avasrc1: avatar}}, {multi: true})
await Chat.update({email2: email}, {$set: {avasrc2: avatar}}, {multi: true})
await Chat.update({messages: {$elemMatch:{email: email}}},{"$set": {"messages.$.avasrc": avatar}}, {multi: true})
結果,它僅適用於第一個。 我需要改變:
無需對同一個集合使用多個查詢。 您可以像這樣使用一個查詢,
await Chat.updateMany({email1: email}, {$set: {avasrc1: avatar, avasrc2: avatar}})
檢查此文檔以獲取更多詳細信息, 更新許多 mongo 文檔
通過閱讀另一個問題的答案,我找到了我的問題的答案。
對此的最終答案是。
await Chat.updateMany({email1: email}, {$set: {avasrc1: avatar}}, {multi: true})
await Chat.updateMany({email2: email}, {$set: {avasrc2: avatar}}, {multi: true})
await Chat.updateMany({"messages.email": email},{"$set": {"messages.$[elem].avasrc": avatar}}, { "arrayFilters": [{ "elem.email": email }], "multi": true })
感謝您的幫助,希望答案對其他人有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.