Mongoose - 更新嵌套数组中的字段
Posted
技术标签:
【中文标题】Mongoose - 更新嵌套数组中的字段【英文标题】:Mongoose - Update field in nested array 【发布时间】:2017-07-05 18:11:36 【问题描述】:我有一个看起来像这样的集合
"_id":ObjectId("58a5a40663d24e0498ecf5e1"),
"picture":null,
"close":
"hour":19,
"minute":30
,
"open":
"hour":7,
"minute":0
,
"location":
"latitude":-6.304718,
"longitude":106.64337
,
"address":"abcd",
"placeName":"xyz",
"floor":[
"number":1,
"slot":[
"id":"A1",
"availability":true
,
"id":"A2",
"availability":true
,
"id":"A3",
"availability":true
,
"id":"A4",
"availability":true
,
"id":"A5",
"availability":true
,
"id":"B1",
"availability":true
,
"id":"B2",
"availability":true
,
"id":"B3",
"availability":true
,
"id":"B4",
"availability":true
,
"id":"B5",
"availability":true
]
,
"number":3,
"slot":[
"id":"A1",
"availability":true
,
"id":"A2",
"availability":true
,
"id":"A3",
"availability":true
,
"id":"B4",
"availability":true
,
"id":"B5",
"availability":true
]
],
"__v":0
现在我想更新 slot.id 与给定查询匹配的“可用性”字段之一。
当我想用这段代码更新时
ParkingPlace.findOneAndUpdate(
'_id': mongoose.Types.ObjectId(placeID),
'floor':
$elemMatch:
'number': body.floor
,
'floor.slot':
$elemMatch:
'id': body.slot
,
$set:
'slot.$.availability': false
, function (err, docs)
if (err)
res.json(err);
else
res.json(docs);
);
返回文档,应该表示成功,但数据库中的“可用性”字段仍未更新。
有谁知道为什么以及如何解决它?
**编辑: 我的意思是数据库上的“可用性”字段仍然设置为 true,即使我已经将其设置为 false。
【问题讨论】:
【参考方案1】:你可以使用new
option:
new: bool - 如果为真,则返回修改后的文档而不是 原版的。默认为 false(在 4.0 中更改)
ParkingPlace.findOneAndUpdate(
'_id': mongoose.Types.ObjectId(placeID),
'floor':
$elemMatch:
'number': body.floor
,
'floor.slot':
$elemMatch:
'id': body.slot
,
$set:
'slot.$.availability': false
,
new: true
, function (err, docs)
if (err)
res.json(err);
else
res.json(docs);
);
【讨论】:
我的意思是即使在数据库中,'availability'字段仍然设置为true,即使我已经将它设置为false以上是关于Mongoose - 更新嵌套数组中的字段的主要内容,如果未能解决你的问题,请参考以下文章
使用 javascript 数组方法更新 mongoose 中的嵌套数组