2017-02-16 7 views
0

では、私はこのマングース - Updateフィールドネストされた配列

{ 
    "_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を使用することができます。

新しい:BOOL - trueの場合、むしろ 元より変更された文書を返します。デフォルトはfalse

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

私は何を意味することは、私はfalseに設定しているにもかかわらず、でもデータベースで、「可用性」欄がまだtrueに設定されていることである(4.0に変更します) – Jegul

関連する問題