我有一个带有嵌套对象的数据模型,我想使用主对象ID以及与嵌套对象相关联的日期和时间将“可用”字段更新为“保留”。这是我的数据...
{
"_id": {
"$oid": "5bf1a675041f242cda138d1c"
},
"availability": [
{
"_id": {
"$oid": "5bf2c077d5683c38afacf34b"
},
"date": "2018-12-20 ",
"time": " 11:00 - 12:00 ",
"status": "reserved"
},
{
"_id": {
"$oid": "5bf2c3bb8b95bd3a7cb3eabe"
},
"date": "2018-11-30",
"time": "18:00 - 19:00",
"status": "available"
}
],
"name": "blah",
"price": 50,
"city": "blah",
"__v": 0
}
还有我正在尝试的代码...
router.get('/reserve/:id', function(req, res, next){
//I've other stuff here that sets the correct variables according to the console.log, so str2[0] contains the date I want to find, etc.
Pitch.findOneAndUpdate({
id: req.params.id,
'availability.date': 'str2[0]', //passing in 2018-11-30
'availability.time': 'str2[1]', //passing in 18:00 - 19:00
'availability.status': 'available'
},
{$set: {
'availability.$.status': 'reserved'
}
})
但是,该对象不会更新,并且将状态设置为“已保留”。谁能发现我在做什么错?我应该尝试使用不同的条件访问特定对象吗?
编辑:经过反复试验,我认为问题是“查找”部分返回了父对象,并且返回了“可用性”数组中的所有子对象。 “更新”部分不知道要更新哪个“状态”,并且此刻失败。
我从前端的表单返回日期和时间,并认为我可以从其父ID加上保留的日期和时间来识别数组中的对象。
所以我想我的问题应该是,因为URL中返回的ID是父对象ID,是否有办法唯一地提取指定的可用性对象(例如5bf2c3bb8b95bd3a7cb3eabe)并将其状态更新为“保留”?
编辑2:我也可以通过它的“ availability._id”来“查找”一个项目,但是返回了完整的父对象,因此“更新状态”部分由于太宽而无法使用。
答案 0 :(得分:0)
Pitch.findOneAndUpdate({
id: req.params.id,
'availability.status': 'available'
},
{$set: {
'availability.$.status': 'reserved',
'availability.$.date': 'str2[0]', //passing in 2018-11-30
'availability.$.time': 'str2[1]', //passing in 18:00 - 19:00
}
})