簡體   English   中英

如何在 ZCCADCDEDB567ABAE643E15DCF0974E503Z model 上的多個文檔中多次更新數組中的任何匹配,而不僅僅是第一個?

[英]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})

結果,它僅適用於第一個。 我需要改變:

  1. 如果 email1 = email,則所有 avasrc1 到頭像
  2. 如果 email2 = email,則所有 avasrc2 到頭像
  3. 整個數組中的所有 messages.avasrc 到 if messages.email = email

無需對同一個集合使用多個查詢。 您可以像這樣使用一個查詢,

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM