试图为我做短路。我想为所有查询创建一个函数。对于settings.amount
,settings.balance
等。
exports.updateUsers = function ( user_id, where, what, pass ) {
var _where = 'settings.'+where; //when I use it doesn't update
user.findOneAndUpdate(
{'user_id' : user_id},
{_where : what }).exec(function(e,d){
pass("ok")
})
};
我如何实现自己的需求?有什么办法吗?
答案 0 :(得分:2)
{_where : what }
将_where
视为String
字面值,相当于:{"_where":what}
。因此,您没有获得任何更新结果,因为没有_where
之类的字段。您需要以下面的方式分配它以使其正常工作。
exports.updateUsers = function ( user_id, where, what, pass ) {
var _where = 'settings.'+where; //when I use it doesn't update
var update = {};
update[_where] = what;
user.findOneAndUpdate(
{'user_id' : user_id},
update).exec(function(e,d){
pass("ok")
})
};
update[_where] = what;
解析了_where
变量中的值。
答案 1 :(得分:1)
您需要使用$ set运算符。有关示例,请参阅MongoDB docs。
所以我认为你的功能可以写成:
exports.updateUsers = function ( user_id, where, what, pass ) {
var setQuery = { $set: {} };
setQuery.$set['settings.'+where] = what;
user.findOneAndUpdate(
{'user_id' : user_id},
setQuery).exec(function(e,d){
pass("ok")
})
};