2017-03-15 5 views
0

"up"と "down"の2種類の旅行のサインインユーザーの出席を保存し、選択したルートに保存していますユーザーによって。私のような出席オブジェクトに何かしたい :初めて出席オブジェクトに対するのでJavaScriptでオブジェクトのプロパティを動的に作成または追加できません

attendance = { 
    up: { 
    'Wed Mar 15 2017' : [1,2,3.....], 
    'Wed Mar 16 2017' : [1, 2, 5 ,6 ....] 
    } 
    down : { 
    'Wed Mar 15 2017' : [1,2,3.....], 
    'Wed Mar 16 2017' : [1, 2, 5 ,6 ....] 
    } 
} 

は、私はそれを作成しています、データベースに存在しません。

app.get('/attendance', function (req, res) { 
var routeId = req.user.place_id; 
var userId = req.user._id; 
var type = req.query.type; 
route.findById(routeId, function (err, selected_route) { 
    if (err) throw err; 
    if (selected_route !== null) { 
     var date = formatDate(); 

     // appending the user attendance to his/her selected route 
     if (selected_route.attendance !== undefined) { 
      if (selected_route.attendance[type] !== undefined) { 
       if (selected_route.attendance[type][date] !== undefined) { 
        selected_route.attendance[type][date].push(userId); 
       } 
       else { 
        // if(selected_route.attendance.type) 
        selected_route.attendance[type][date] = []; 
        selected_route.attendance[type][date].push(userId); 
       } 
      } 
      else { 
       selected_route.attendance[type] = {}; 
       selected_route.attendance[type][date] = []; 
       selected_route.attendance[type][date].push(userId); 
      } 
     } 
     else { 
      selected_route.attendance = {}; 
      selected_route.attendance[type] = {}; 
      selected_route.attendance[type][date] = []; 
      selected_route.attendance[type][date].push(userId); 
     } 
     console.log(type); 

     // prints the data, but console.log(selected_route.attendance) still prints [] 



     console.log(selected_route.attendance[type]); 

     // saving the update route info 
     selected_route.save(function (err) { 
      if (err) throw err; 
      res.send("Success"); 
     }); 
    } 
    else { 
     res.send("place error"); 
    } 
}); 
}); 

保存した後は、出席者オブジェクトのみがデータベースにフィールドなしで表示されます。 もし誰かが私が間違っていると私に教えていただけますか?それを行うための他のより効率的な方法があるかどうかを判断します。ありがとう。私が試し確認するには

EDIT

 console.log(type); 
     console.log(selected_route.attendance[type]); 
     console.log(selected_route.attendance); 

これが出力されますが、ここから

up 
{ '2017-03-15': [ 58c1464cdeda8810203ce53c ] } 
[{}] 

を取得している、私はそれが成功しselected_route.attendanceを作成することを集めることができます[type]オブジェクトが、selected_route.attendanceを出力しません。 で同様のサンプルスニペットを試みましたとうまく動作します。 今私は完全に何のアイデアが本当に感謝される無知ですか?

答えて

0

そこにあなたがルートのリストを持っているルートを選択するためのいくつかの可能性があるので、あなたは出席を含むルートオブジェクトを作成することができたよう多分...

let tmp = {}; 
tmp[type] = {}; 
tmp[type][date] = []; 
tmp[type][date].push(userId); 
selected_route.attendance = tmp; 

を助け出席に割り当てる前にオブジェクトを作成します。新しいルートが追加されるたびに、プロパティが最初から正しく表示されます。

+0

私はそれを出力して私の投稿を編集したことがわかるようにコンソールで[]を印刷しました – warl0ck

+0

ええ、私は出席者の権利を最初から追加していますが、なぜこのようにしているのですか – warl0ck

+0

クエリーとしてクエリ{出席:{$存在:偽}} 'を持つ' db.collection.update() 'を行います。 –

関連する問題