我正在开发一个完整的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方法?
答案 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}},
希望它会有所帮助