我有users
(簡化的)文檔結構的MongoDB集合:
{
_id: ObjectId,
name: 'John Doe',
sportsList: [ // array of objects
{
name: 'football',
level: 1500,
levelHistory: [ // array of objects
{
from: 1450,
to: 1500,
date: Date
},
...
]
},
{
name: 'tennis',
level: 1400,
levelHistory: [ // array of objects
{
from: 1350,
to: 1400,
date: Date
},
...
]
},
]
}
我想更新sportsList
具有name === 'tennis'
這樣的元素:
levelHistory
level
到目前為止,我已經設法levelHistory
使用此查詢推送一個新元素:await User.updateOne(
{
_id: userId,
sportsList: {
$elemMatch: { name: 'tennis' }
}
},
{
$push: {
'sportsList.$.levelHistory': {
date: Date,
from: 1400,
to: 1450
}
},
// how do I set 'level: 1450' in the same query?
// if I tried to use a $set: { 'sportsList.$.level': 1450 } mongoDB throws an error
}
)
詢問
update(
{"_id": 1},
[{"$set":
{"sportsList":
{"$map":
{"input": "$sportsList",
"in":
{"$cond":
[{"$ne": ["$$this.name", "tennis"]}, "$$this",
{"$mergeObjects":
["$$this",
{"level": 1450,
"levelHistory":
{"$concatArrays":
["$$this.levelHistory",
[{"from": 1400, "to": 1450, "date": 4}]]}}]}]}}}}}])
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句