无法更新数组中的子文档



我试图在solts中更新uid的值。插槽,但没有工作。我想迭代两层数组来修改文档

{
"_id": {
"$oid": "638455dee12f0122c9812697"
},
"bid": "637b0fdd3d9a96eb913805d3",
"name": "sucess",
"slots": [
{
"date": "2022-11-28T00:00:00.000Z",
"slots": [

{
"uid": null,
"available": true,
"status": null,
"_id": {
"$oid": "638455dee12f0122c98126a0"
}
},
{
"uid": null,
"available": true,
"status": null,
"_id": {
"$oid": "638455dee12f0122c98126a1"
}
}

],
"_id": {
"$oid": "638455dee12f0122c9812698"
}
}   
]}]}

我试图更新id638455dee12f0122c98126a0属性的插槽,如

  • uid:"234235">
  • :假
  • 状态:"预订">

谁能帮我查询一下这个

我试着

const result = await Event.findOne({
'slots.slots': {
$elemMatch: {
_id: req.body.id
}
}
})

是否有办法查询这类文档

您可以使用$[]$[<identifier>]:

db.collection.update({
"slots.slots": {
$elemMatch: {
_id: ObjectId("638455dee12f0122c98126a0")
}
}
},
{
$set: {
"slots.$[].slots.$[item].available": false,
"slots.$[].slots.$[item].uid": "234235",
"slots.$[].slots.$[item].status": "booked"
}
},
{
arrayFilters: [
{
"item._id": ObjectId("638455dee12f0122c98126a0")
}
]
})

看看它在操场的例子中是如何工作的

最新更新