将新对象添加或推送到嵌套的mongodb文档

时间:2017-03-04 22:07:45

标签: node.js mongodb express mongoose

我似乎无法在Stack或Mongoose文档中找到答案。如何将新对象添加到嵌套文档中?

这是我目前的架构:

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

从客户端收到新数据后,我需要进入现有会话文档,我已经尝试了$ addToSet和$ push,但两者都没有给我正确的结果。

这是$ push:

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

1 个答案:

答案 0 :(得分:0)

如果您考虑更改架构以包含dataloop阵列:

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

您可以使用$push上的session.dataloop添加新的dataloop项:

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