2017-03-04 73 views
0

我似乎無法找到一個Stack或Mongoose文檔中的答案。如何將新對象添加到嵌套文檔中?添加或推入新的對象嵌套MongoDB文檔

這是我目前的架構:

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

在從客戶端接收新的數據,我需要推入現有會話文件,我都試過$ addToSet和$推但既不是給我正確的結果。

這是$推:

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

這裏是我的預期輸出:

_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

如果你考慮改變你的架構,包括一個dataloop陣列:

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

您可以使用session.dataloop上的$push添加新的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