2017-02-16 125 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