由网络副手--寻路人于2016.05.18 17:17:00发布在NoSql技术 MongoDB第一篇 : 增删改查操作 阅读3222 评论0 喜欢0 前言、创建数据库 解释: MongoDB 在创建数据库的时候和传统的关系型数据库有些不一样,这货通过use dbname,就相当于创建了一个数据库,但是还需要插入数据后这个数据库才会真实存在. 对于Mongo的增删该查刚开始学习,比较纠结查询的时候到底条件如何加,又是[],又是{},又是(),到底如何处理,我这里给大家分享个口诀: - 方法外层(),抱着参数没法逃 - 单一内容{},单一结构简明了 - 多个内容[], 包在{}外,隔掉 - 查询时刻$来到,范围使用广又好 - find方法耍大刀,批量拿出数绝招 - 查询And快又好,仅在{}里条件加,号 - 一次想查复杂数,条件内容用{},前面用上修饰符,后面{}来包绕,如果值在范围内,修饰后面用[],值儿只需用, - 正则匹配威力大,前后包抄用//, 开头结尾老调调 ^ $ - 匹配null坑不少,最好and上$exists为true来围剿 - mongo查询有深度,数组、范围有蹊跷,查个范围数组来胡闹,加上$elemMatch修饰全办到. - update四参数,一是条件,二内容,三用0来不插入,四用true来多更新 - 加减操作用$inc, 想加想减 +-造 - 局部更新用$set, 免得内容全干掉 - 以上口诀美和妙,学会困扰全撂倒 一、Mongo增加操作 1.1 单条插入 var obj = { ... "name":"brave", ... "sex":1, ... "age":30 }; > db.user.insert(ojb); 1.2 批量插入 db.user.insert( [ { 'name' : "qianqi", 'sex' : 0, 'age' : 10}, { 'name' : "zhaoliu", "sex" : 0, "age" : 22} ] ); 1.3 插入一个数组 db.user.insert({ "name":"masan", "age" : 40, "sex" : 1, "like":["music","books","news"] }); db.user.insert({ "name":"zhousi", "age" : 28, "sex" : 0, "like":["song","listen","news"] }); 二、Mongo删除操作 2.1 有条件性删除 #desc 删除_id 为 object("**") 的数据 db.user.remove({ "_id" : ObjectId("573c0abae55e93cece734382")}); 2.2 删除集合 这样整个集合都没了. db.user.drop(); 三、查询操作无非就有下面这种针对性和组合性的操作 ①: >, >=, <, <=, !=, =。 ②:And,OR,In,NotIn 在MongoDB 中对应的符合为 $gt ,$gte ,$lt,$lte, $ne,$eq,,$or,$in,$nin 3.1 单条件查询,只举一个例子 #desc 查询年龄为 >=30的用户 db.user.find( {"age":{"$gte":30}}) 结果: { "_id" : ObjectId("573c0a78e55e93cece734380"), "name" : "brave", "sex" : 1, "age" : 30 } { "_id" : ObjectId("573c0f99e55e93cece734383"), "name" : "lisi", "sex" : "1", "age" : 30 } 3.2 组合条件查询 #desc 查询年龄=30 && 性别=1 db.user.find({"age":30,"sex":1}); 结果: { "_id" : ObjectId("573c0a78e55e93cece734380"), "name" : "brave", "sex" : 1, "age" : 30 } 3.3 范围性查询 "$or", "$in","$nin" db.user.find({ "age":{"$in":[22,30]}}) 结果: { "_id" : ObjectId("573c0a78e55e93cece734380"), "name" : "brave", "sex" : 1, "age" : 30 } { "_id" : ObjectId("573c0f99e55e93cece734383"), "name" : "lisi", "sex" : "1", "age" : 30 } { "_id" : ObjectId("573c1a72e55e93cece734386"), "name" : "zhaoliu", "sex" : 0, "age" : 22 } 3.4 正则匹配 #desc 查询姓名 以b开头 以e结尾 > db.user.find({ "name" : /^b/,"name" : /e$/ }) 结果 { "_id" : ObjectId("573c0a78e55e93cece734380"), "name" : "brave", "sex" : 1, "age" : 30 } 3.5 计算取余查询: #查询年龄取余5余数=2这个给定值的数据集 db.user.find({"age":{"$mod",[5,2]}}) { "_id" : ObjectId("573c1a72e55e93cece734386"), "name" : "zhaoliu", "sex" : 0, "age" : 22 } #如果要求返回年龄为取余5 余数不等2的数据集结果 db.user.find({"age":{"$not":{"$mod":[5,2]}}}); { "_id" : ObjectId("573c0a78e55e93cece734380"), "name" : "brave", "sex" : 1, "age" : 31 } { "_id" : ObjectId("573c0f99e55e93cece734383"), "name" : "lisi", "sex" : "1", "age" : 31 } 3.6 特殊字值null的查询 查询null除了匹配值为null的,还会匹配不包含查询字段的行 > db.user.find({"aa" : {"$eq":null}}); { "_id" : ObjectId("573c0a78e55e93cece734380"), "name" : "brave", "sex" : 1, "age" : 31 } { "_id" : ObjectId("573c0f99e55e93cece734383"), "name" : "lisi", "sex" : "1", "age" : 31 } { "_id" : ObjectId("573c1a72e55e93cece734386"), "name" : "zhaoliu", "sex" : 0, "age" : 22 } db.user.find({ "aa" : {"$eq":null, $exists:true }}); 3.7 数组查询: #desc 查询数组元素中包含news的数据 > db.user.find({"like":"news"}) { "_id" : ObjectId("573c4d4ce55e93cece734387"), "name" : "masan", "age" : 40, "sex" : 1, "like" : [ "music", "books", "news" ] } { "_id" : ObjectId("573c4dd3e55e93cece734388"), "name" : "zhousi", "age" : 28, "sex" : 0, "like" : [ "song", "listen", "news" ] } #desc 查询数组元素中既有news 又有 song的数据 > db.user.find({"like":{"$all":["news","song"]}}) { "_id" : ObjectId("573c4dd3e55e93cece734388"), "name" : "zhousi", "age" : 28, "sex" : 0, "like" : [ "song", "listen", "news" ] } 4.修改 对Update 命令进行介绍下 Update有4个参数:第一个selector,第二个newValue,第三个upserts,第四个multipleUpdate 第三个参数如果为true,如果无查询的接口,则会把查询条件和更新数据组合成一条新数据插入 第四个参数默认为false,也就是只更新第一条,如果需要批量更新则设置为true 4.1 整个数据对象更新 #desc 先查询出年龄为20的人,把其中一个字段姓名给改为zhaoliu_ok,然后整体保存回去. var where=db.user.findOne({"age":22}); where.name="zhaoliu_ok"; zhaoliu_ok > db.user.update({"name":"zhaoliu"},where); 4.2 $inc 改器前者加减操作 #desc 对年龄阶段进行加/减2岁操作 db.user.update({"age":22},{"$inc":{"age":2}}); db.user.update({"name":"zhaoliu_ok"},{"$inc":{"age":-2}}); 4.3 $set 局部修改 #desc 把姓名修改为zhaoliu age修改为22 > db.user.update({"name":"zhaoliu_ok"},{"$set":{"name":"zhaoliu","age":22}}); 4.4 upsert操作,这个方法和update很相似,把update 第三个参数设置为true就一样了. 这个可是mongodb创造出来的“词”,这个upsert操作就是说:没有查到,我就在数据库里面新增一条,其实这样也有好处,就是避免了我在数据库里面判断是update还是add操作,使用起来很简单将update的第三个参数设为true即可和这个方法一样. db.user.upsert({"age":30},{"$inc":{"age":1}}); 4.5 如果进行批量修改 #desc 对年龄为30的用户进行年龄加1 db.user.update({"age":30},{"$inc":{"age":1}}, false,true); 赞 0 分享 赏 您可以选择一种方式赞助本站 支付宝扫码赞助 BraveDu 署名: 网络副手~寻路人