配列内の 1 つの項目のみが「現在」としてマークされていることを確認したい。したがって、私の考えでは、着信データが「current = true」とマークされている場合、他のすべての項目を「current = false」に変更したいと考えています。
データは次のようになります。
{
_id:123,
name:"bob jones",
schools:[
{
name: "central HS",
current: false
},
{
name: "east side HS",
current: true
}
]
}
したがって、学校を追加する場合は、既存の学校が current: false としてマークされていることを確認したいと思います。新しい学校が current: true とマークされている場合のみです。
着信オブジェクトは次のようになります。
{
name: "Discipline Military Academy HS",
current: true
}
これが私が使用しようとしているコードです。エラーは発生しませんが、current=true の既存の学校はそのままで、変更はありません。したがって、機能していないようです
注: 渡された ID は、個人の _id (_id:123) です。
module.exports.addSchool = function( id, data, callback ) {
// reset all the other "currents" to false (only ONE current school permitted)
if ( typeof data.current != 'undefined' && data.current === true ) {
// NOTE: a console.log('here'); shows I'm getting past the conditional...
User.update( {_id: id}, {$set: {'schools.0.current': false}} );
}
User.findByIdAndUpdate( id, {
$addToSet: {
"schools": data
}
}, {new: true}, callback );
}
助言がありますか?
注: 私は mongoose 5.2.13 を使用して高速アプリを mongoDB に接続していますが、この警告が表示されます - (node:14508) DeprecationWarning: collection.findAndModify is deprecated. 代わりに、findOneAndUpdate、findOneAndReplace、または findOneAndDelete を使用してください。
しかし、私は「findAndModify」を使用していないので、これが当てはまるとは思いませんが、なぜ表示されるのか興味があります。