MongoDB变量如何传参给查询条件
来源:互联网 发布:雪人翻译软件下载 编辑:程序博客网 时间:2024/05/21 16:57
最近需要在express中使用AJAX,通过AJAX给数据库更新用户表,但是用户数据很多,所以需要把查询条件写成动态的,即通过变量给mongodb中的update传参;
首先我们先来看看mongodb中update如何使用:
db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> })
- query : update的查询条件,类似sql update查询内where后面的。
- update : update的对象和一些更新的操作符(如
, inc…)等,也可以理解为sql -
update查询内set后面的 - upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
- multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
- writeConcern :可选,抛出异常的级别。
5个参数,在这不多解释,我们直接看列子即可明白:
db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) # 输出信息
SegmentFault平台上给了一个解决方法,
原文地址:https://segmentfault.com/q/1010000004511023
暂不讨论此方法是否可行(用官方的语法去解析是最好的,但笔者试过不行,可能使低级错误或环境问题);
于是乎,我试着用其他方法,然后看到菜鸟教程中在Node.js中使用mMongoDB的更新操作受到了启发,关键代码是这样的:
var whereStr = {"name":'菜鸟教程'}; var updateStr = {$set: { "url" : "https://www.runoob.com" }}; collection.update(whereStr,updateStr, function(err, result) { if(err) { console.log('Error:'+ err); return; } callback(result); });
就是把查询条件赋值给变量,这个变量当然使一个对象,然后我们可以通过在变量中把参数传递进去(因为在查询语句中无法加参数,会有语法错误)
而直接把变量写在查询条件中使识别不了的,就像给JSON对象赋值时,用变量是没有用的,它会自动解析为属性key,键名;
于是,我们可以用函数使JSON对象的键名通过参数传递:
参考了百度知道上json对象创建时,key为变量,如何取其值?的方法:
原文地址:https://zhidao.baidu.com/question/518699972198979285.html
于是,当key只有一个时,我们可以这样:
<script type="text/javascript"> var key = 'phone'; var key2 = 'personalInfos.' + key; var value = '110'; var updateStr = []; function setKey(key,array){ var resultArray = []; var temp = {}; temp[key] = value; resultArray.push(temp); return resultArray; } var updateStr = setKey(key2,value); console.log(updateStr[0]);</script>
在控制台console中输出
Object personalInfos.phone:"110"__proto__:Object
那么转移到mongoDB中,下面是我的源代码:
User.update = function (name, key, value, callback) { var key2 = 'personalInfos.' + key; var updateStr = []; function setKey(keyName,valueName){ var resultJson = []; var temp = {}; temp[keyName] = valueName; resultJson.push(temp); return resultJson; } updateStr = setKey(key2,value); mongodb.open(function (err, db) { if (err) { return callback(err); } db.collection('User', function (err, collection) { if (err) { mongodb.close(); return callback(err); } collection.update( {}, { "$set": updateStr[0] }, function (err, user) { mongodb.close(); if (err) { return callback(err); } callback(null, user); } ) }) })}
最后,成功的给通过每个不同的key给查询到数据库的key,从而赋值。
0 0
- MongoDB变量如何传参给查询条件
- MongoDB 查询条件
- MongoDB 使用查询条件
- Mongodb 插入 条件查询
- Mongodb基础条件查询
- mongodb条件查询
- 【MongoDB-query查询条件】
- mongodb 查询条件
- mongodb 查询条件
- mongodb 查询条件
- mongodb条件查询(二)
- mongodb[四]查询条件大全
- Java MongoDB 条件查询及其分组查询
- MongoDB 高级查询条件操作符
- MongoDB小结15 - find【查询条件$ne】
- MongoDB小结16 - find【查询条件$in】
- MongoDB小结17 - find【查询条件$or】
- MongoDB小结18 - find【查询条件$not】
- 用qt5.3.2打开ros(机器人操作系統)的界面(CmakeList.txt)
- Win7旗舰版安装tensorflow
- CCCC-GPLT L1-036. A乘以B 团体程序设计天梯赛
- 用php连接数据库
- 计161_Problem : 字符串操作二(串)
- MongoDB变量如何传参给查询条件
- C#笔记整理(十)
- java中内存分配深入分析
- spring定时器时间表达式
- Week Training: 515 Find Largest Value in Each Tree Row
- jquery----手风琴
- (ros/navigation/gmapping)导航/建地图
- 分布式任务分发框架Gearman教程和PHP实现实例
- 内部链接与外部链接