2017-03-04 10 views
0

StackまたはMongooseドキュメントでこれに対する回答を見つけることができないようです。ネストされたドキュメントに新しいオブジェクトを追加するにはどうすればよいですか?新しいオブジェクトをネストされたmongodbドキュメントに追加またはプッシュ

これが私の現在のスキーマです:

var SessionsSchema = mongoose.Schema({ 
     session: { 
     sid: String, 
     dataloop: { 
      timeStamp: Date, 
      sensorValues:{ 
       value: Number, 
       index: Number 
      } 
     } 
    } 
}); 

クライアントから新しいデータを受信すると、私は既存のセッションドキュメントにプッシュする必要があり、私は両方$ addToSetと$プッシュを試みたが、どちらも私を与えています正しい結果。

これは$プッシュです:あなたはdataloop配列を含めるようにスキーマを変更することを検討している場合

_id:58bb37a7e2950617355fab0d 
    session:Object 
    sid:8 
    dataloop:Object 
     timeStamp:2017-03-04 16:54:27.057 
     sensorValues:Object 
      value:134 
      index:18 
      sessionTime:0 
    dataloop:Object // <----------NEW OBJECT ADDED HERE 
     timeStamp:2017-03-04 16:54:27.059 
     sensorValues:Object 
      value:134 
      index:18 
      sessionTime:0 
    dataloop:Object // <----------ANOTHER NEW OBJECT 
     timeStamp:2017-03-04 16:54:27.059 
     sensorValues:Object 
      value:134 
      index:18 
      sessionTime:0 
    __v:0 

答えて

0

:ここ

Sessions.findOneAndUpdate(
        { 'session.sid': sessionID }, 
        { 
         '$push:': {dataloop:{ 
           timeStamp: datemilli, 
           sensorValues:{ 
            value: pressure, 
            index: indexNum, 
            sessionTime: relativeTime 
           } 
          } 
         } 
        }, 
        function(err,loop) { 
         console.log(loop); 
        } 
       ) 

は私の予想出力され

var SessionsSchema = mongoose.Schema({ 
    session: { 
     sid: String, 
     dataloop: [{ 
      timeStamp: Date, 
      sensorValues: { 
       value: Number, 
       index: Number 
      } 
     }] 
    } 
}); 

session.dataloopに追加すると、新しいを追加できますアイテム:

Sessions.findOneAndUpdate({ 'session.sid': sessionID }, { 
     '$push': { 
      'session.dataloop': { 
       timeStamp: datemilli, 
       sensorValues: { 
        value: pressure, 
        index: indexNum, 
        sessionTime: relativeTime 
       } 
      } 
     } 
    }, 
    function(err, loop) { 
     console.log(loop); 
    } 
) 
+0

これは前のオブジェクトを上書きするように見えますが、前のオブジェクトを保持して新しいオブジェクトを追加する必要があります。理にかなっている? – HjalmarCarlson

+0

'session.dataloop'には、指定したフィールド以外のフィールドがあり、それらはそのままでなければなりませんか? –

+0

同じスキーマを持つフィールドの新しいセット。例:session.dataloop1、session.dataloop2、session.dataloop3 – HjalmarCarlson

関連する問題