Mongoose findOneAndUpdate:有没有办法在子文档中更新对象?

时间:2017-07-17 09:53:17

标签: node.js mongodb express mongoose

我有一个这样的模型:

//文件

var programSchema = new Schema({
    name: {
        type: String
    },
    session: [sessionSchema]
}, {
    timestamps: true
});

//子文档

var sessionSchema = new Schema({
    name: {
        type: String
    },
    info: {
        type: String
    },
    order: {
        type: Number
    }
}, {
    timestamps: true
});

有没有办法访问子文档对象并编辑是否存在,否则创建新的?

我想到这样的事情:

 router.post('/createsession', function (req, res) {

        var options = { upsert: true, new: true, setDefaultsOnInsert: true };

        var SessionData = req.body.session;

        if (!SessionData.id) {
            SessionData.id = mongoose.Types.ObjectId();
        }

        Program.findOneAndUpdate({ _id: req.body.session.id }, { $push: { session: SessionData } }, options, function (err, session) {
            if (err) {
                return res.status(409).json({
                    success: false,
                    message: 'Error creating/updating session'
                });
            } else {
                return res.status(200).json({
                    success: true,
                    session: session
                });
            }
        });
    });

这只会创建一个新文档。我是否可以使用相同的查询编辑现有内容?

1 个答案:

答案 0 :(得分:0)

试试这个

      var options = { upsert: true};

  Program.findOneAndUpdate({ _id: req.body.session.id }, { $set: {
                   //Set individually values
               name: req.nnae,

              } }, 
               options, function (err, session) {
            if (err) {
                return res.status(409).json({
                    success: false,
                    message: 'Error creating/updating session'
                });
            } else {
                return res.status(200).json({
                    success: true,
                    session: session
                });
            }
        });
    });