为findOneAndUpdate Query创建通用函数

时间:2017-12-08 10:05:50

标签: node.js mongodb

我想为findOneAndUpdate查询创建一个通用函数。 所以我的功能就像

var findAndUpdate = function(req, res, activityname, CollectionName){
    CollectionName.findOneAndUpdate({activityname: req.body.user_id},  function(err, data){
        if(err){
            res.send('error');
        } else {
           res.send('data')
        }
    });
};

调用这样的函数

findAndUpdate(req, res, 'user_id', User);

但是这里唯一的问题是在activityname上。如果我在Query下直接传递'user_id',那么它会返回数据,否则什么都不返回。喜欢这个

var findAndUpdate = function(req, res, activityname, CollectionName){
    CollectionName.findOneAndUpdate({'user_id': req.body.user_id},  function(err, data){
        if(err){
            res.send('error');
        } else {
           res.send('data')
        }
    });
};

在从变量中获取值之后,我也尝试提供与此类似的'user_id'。像这样,但仍然没有得到

var findAndUpdate = function(req, res, activityname, CollectionName){
var uid = ("'"+activityname+"'");
    CollectionName.findOneAndUpdate({uid : req.body.user_id},  function(err, data){
        if(err){
            res.send('error');
        } else {
           res.send('data')
        }
    });
};

任何人都知道如何解决它。??

1 个答案:

答案 0 :(得分:1)

您的问题是简单的JavaScript,而不是MongoDB。例如,写

var toto = {age: 12};

var toto = {'age': 12};

将具有完全相同的效果。如果要动态定义属性名称,可以这样做:

var prop = 'age';
var toto = {};
toto[prop] = 12;

在您的情况下,您可以通过这种方式实现您想要的目标:

var findAndUpdate = function(req, res, activityname, CollectionName){
  var filter = {};
  filter[activityname] = req.body.user_id;
  CollectionName.findOneAndUpdate(filter,  function(err, data){
    if(err){
        res.send('error');
    } else {
       res.send('data')
    }
  });
};