這是我的架構
{ _id : Number,
user1: {
_id : Number,
userDetail : {
userId : Number,
userResult : String,
}
},
user2 : {
_id : Number,
userDetail : {
userId : Number,
userResult : String,
}
},
createdAt : Date,
updatedAt : Date
}
示例檔案看起來像這樣
{
"_id" : ObjectId("625ebcabcc03685c273b2363"),
"user1" : {
"_id" : "625ebc9fcc03685c273b2207",
"userDetail" : {
"userId" : 7,
"userResult" : "won"
}
},
"user2" : {
"_id" : "625ebc9fcc03685c273b2208",
"userDetail" : {
"userId" : 11,
"userResult" : "lose"
}
},
"createdAt" : ISODate("2022-04-19T13:44:11.781Z"),
"updatedAt" : ISODate("2022-04-19T13:44:11.781Z")
}
現在我有近 1000 個該用戶玩過的檔案。所以我需要更新所有這些用戶的 userId。我怎么能做到這一點。我讓所有用戶通過
db.getCollection('matches').find({$or : [{'user1.userDetails.userId' : 7},
{'user2.userDetails.userId' : 7}
]})
通過上面的查詢,我得到了 userId 7 播放過的所有檔案,我需要將 userId 7 更新為 10。我該怎么做。
uj5u.com熱心網友回復:
您可以使用$cond:
db.collection.update({
$or: [{"user1.userDetail.userId": 7}, {"user2.userDetail.userId": 7}]
},
[
{
$set: {
"user1.userDetail.userId": {
$cond: [{$eq: ["$user1.userDetail.userId", 7]}, 10, "$user1.userDetail.userId"]},
"user2.userDetail.userId": {
$cond: [{$eq: ["$user2.userDetail.userId", 7]}, 10,
"$user2.userDetail.userId"
]
}
}
}
],
{multi: true})
正如你在操場上看到的
uj5u.com熱心網友回復:
試試這個
db.getCollection('matches').updateMany({$or : [{"user1.userDetails.userId" : 7},
{"user2.userDetails.userId" : 7}]}, { $set: { "user1.userDetails.userId": 10 })
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/464498.html
