2017-02-16 128 views
0

我有一个集合,看起来像这样猫鼬 - 更新场嵌套数组

{ 
    "_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); 
    } 
}); 

它返回文档,这应该意味着它成功更新,但仍然没有更新数据库中的“可用性”字段。

有谁知道为什么以及如何解决它?

**编辑: 我的意思是即使我已经将它设置为false,数据库上的'可用性'字段仍然设置为true。

回答

1

您可以使用new option

新:布尔 - 如果为true,返回修改后的文档,而不是原来的 。默认为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); 
    } 
}); 
+0

我的意思是,即使在数据库中,“可用性”字段仍设置为true,即使我已经将它设置为false – Jegul