您的位置:首页 > 数据库 > Mongodb

MongoDB 在windows shell环境下的基本操作和命令的使用示例(四)

2015-08-02 14:31 851 查看

接上一篇文章继续《MongoDB 在windows shell环境下的基本操作和命令的使用示例(三)

1,集合的嵌套,在testcoll集合中添加一个嵌套集合,其它的嵌套和下面一样

db.testcoll.insert({"name":"顶级","age":22,"salares":5000,"course":["语文","数学","英语","meishu"],"parents":[{"name":"父亲111","job":"juzhang","age":45},{"name":"母亲111","job":"juzhang1","age":35}]})

2,这样集合的操作就会变的特别复杂,所以在实际使用中建议数据的存储结构尽量简单

集合中判断某个字段是否存在$exists,可以对一些不需要的数据进行过滤

找出集合中parents存在的字段

db.testcoll.find({"parents":{"$exists":true}}).pretty()



找出parents不存在的字段

db.testcoll.find({"parents":{"$exists":false}}).pretty()

3,where条件判断$where,下面4种形式等效,都能得下面的代码

db.testcoll.find({"$where":"this.age>50"}).pretty()//不是很常用

db.testcoll.find("this.age>50").pretty()//上面的简化版本

db.testcoll.find(function(){//javescript代码

return this.age>50;

}).pretty()

db.testcoll.find({"$where":function(){//javescript代码

return this.age>50;

}}).pretty()



where的嵌套组合,where一般很少用

db.testcoll.find({"$and":[

{"$where":"this.age>20"},

{"$where":"this.age<30"}

]}).pretty()

4,模糊查询(正则运算)

基础语法: {key:正则标记}

完整语法:{key:{"$regex":正则标记,“options”:选项}}

i;忽略大小写

m,多行查找

x,空白数据忽略

s,匹配所有字符(圆点)

db.testcoll.find({"name":/张/}).pretty()//正则简写

db.testcoll.find({"name":{"$regex":/李/i}}).pretty()//正则完整表述,i表示不区分大小写



5,数据排序,前面博客已经讲过,这边只提一下,注意自然排序

db.testcoll.find().sort({"age":1}).pretty()//按年纪升序

db.testcoll.find().sort({"age":-1}).pretty()//按年纪降序

db.testcoll.find().sort({"$natural":1}).pretty()//按存入的先后自然排序1,升,-1,降

6,分页显示,也适合大数据skip(),limit(),前面讲过,这里不再重复

7,集合数据的更新操作,这种操作比较麻烦,save(),update();

mutil: false更新一个,true更新所有

将年纪18岁更新为100分,注意参数

db.testcoll.update({"age":18},{"$set":{"score":100}},false,false)//更新一个

db.testcoll.update({"age":18},{"$set":{"score":100}},false,true)//更新所有



增加操作

db.testcoll.update({"age":18},{"$set":{"name":"不存在"}},true,false)

db.testcoll.find({"age":18}).pretty(),显示结果如下



8,修改器,像$set,大概提供了10种修改器

$inc:增加某个数据字段的值

语法:{“$inc”:{"成员":“内容”}}

将年纪为18的分数减30的同时年纪加一岁

db.testcoll.update({"age":18},{"$inc":{"score":-30,"age":1}})

db.testcoll.find({"age":19}).pretty()



$unset:删除某个成员值

$push:将内容追加到指定地方(针对数组)

db.testcoll.update({"name":"张三"},{"$push":{"course":"语文"}})

db.testcoll.find({"name":"张三"}).pretty()



$addtoset

$pushall:可以一次追加多个到数组里面,代码运行两次结果

db.testcoll.update({"name":"李四"},{"$pushAll":{"course":["语文","英语","体育"]}})

db.testcoll.update({"name":"李四"},{"$pushAll":{"course":["语文","英语","体育"]}})

db.testcoll.find({"name":"李四"}).pretty()



$pop:删除数组数据

db.testcoll.update({"name":"李四"},{"$pop":{"course":1}})

db.testcoll.find({"name":"李四"}).pretty()



$pull:从数组中删除指定内容的数据

db.testcoll.update({"name":"李四"},{"$pull":{"course":"体育"}})

db.testcoll.find({"name":"李四"}).pretty()




$pullAll,一次删除多个数据

db.testcoll.update({"name":"李四"},{"$pullAll":{"course":["语文","英语"]}})

db.testcoll.find({"name":"李四"}).pretty()



$rename:重命名

db.testcoll.update({"name":"李四"},{"$rename":{"age":"年纪"}})

db.testcoll.find({"name":"李四"}).pretty()



9,数据的删除

remove(can1,can2)

can1:删除条件

can2:true或是1只删除1个

10,游标(重点)

数据可以一行行的进行操作

对于find()方法就可以返回游标了

判断是否有下一行数据用hasNext()

取出数据next()

var cursor=db.testcoll.find()

cursor.hasNext()

cursor.next()



只输出姓名

var cursor=db.testcoll.find();

while(cursor.hasNext()){

var doc=cursor.next();

print(doc.name);

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: