Mongoose findOneAndUpdate()没有条件更新最后创建的文档

时间:2015-09-28 18:19:56

标签: node.js mongodb mongoose

我正在开发一个完整的AJAX客户端表单,如果帖子不包含客户端ID,它将创建一个新的MongoDB条目,如果有ID,它将更新条目。

我试图像这样使用mongoose的findOneAndUpdate():

exports.post = function ( req, res ) {
    var payload   = req.body,
        condition = payload._id ? { _id: payload._id } : null,
        query     = {}

    query[ payload.fieldName ] = payload.value

    Client.findAndUpdate(
        condition,
        query,
        { upsert: true },
        function ( err, client ) {
            var response = {
                success: true,
                message: null,
                client: client
            }

            if ( err ) {
                console.error( err )
                results.success = false
                results.message = err
            }

            res.json( response )    
        })
}

我的问题是,如果条件为null或{},它将找到最后创建的条目并更新该条目,而不是创建新条目,

我如何达到我想要的行为? if else并根据ID可用性使用2种不同的mongoose方法?

1 个答案:

答案 0 :(得分:3)

如果使用null或空文档进行查询,它将返回所有文档的列表,例如 db.collection.find()等效于db.collection.find(null)和db.collection.find({})

只需将condition = payload._id ? { _id: payload._id } : null,行更新为

condition = payload._id ? { _id: payload._id } : {_id:{"$exists":false}}, 

希望它会有所帮助