MongoDB数据库的数据操作

1.数据增加操作

1>添加一条简单的数据

db.infos.insert({'url':'http://www.baidu.com'})

2>以数组方式保存,如果想要保存多个数据时

db.infos.insert([
        {'url':'http://www.baidu.com'},
        {'url':'http://hao.360.cn'},
        {'url':'http://www.csdn.net'}
        ])

3>结合javascript添加大量的数据,比如10000条数据

for(var x = 0; x < 10000 ;x++){
    db.infos.insert({'data':'count-'+x});
}

在保存大量大量的数据的情况下,列表是不会全部列出,它只会列出部分的内容,需要输入it让它继续输出

2.数据查询操作

    在任何数据库之中,数据的查询操作都是最为麻烦的,而在MongoDB数据库中,对于查询的支持非常到位,有关系运算,逻辑运算,数组运算,正则运算等等...

    对于数据的查询操作的核心的语法:"db.集合名称.find({查询条件}[,设置显示的字段])".

(1)简单查询

1>使用最简单的最直接的查询函数find()

db.infos.find()

2>根据条件查询数据,这里希望找出url为"http://www.baidu.com"的数据

db.infos.find({'url':'http://www.baidu.com'})

3>上面提到了一个设置显示的字段,不想显示"_id"字段,如果不需要显示的话设置为0,需要显示的话设置为1

db.infos.find({'url':'http://www.baidu.com'},{'_id':0,'url':1})

 4>查询单个一条数据

db.infos.findOne({'url':'http://www.baidu.com'})

5>华丽显示,只有在数据多的情况下效果明显

db.infos.find({'url':'http://www.baidu.com'}).pretty()

(2)关系查询

关系运算:大于($gt),小于($lt),大于等于($gte),小于等于($lte),不等于($ne),等于(key:value)

插入数据模型

db.student.insert({'name':'张三','sex':'男','age':15,'score':98,'address':'海淀区'})
db.student.insert({'name':'李四','sex':'男','age':20,'score':26,'address':'朝阳区'})
db.student.insert({'name':'王五','sex':'男','age':17,'score':86,'address':'西城区'})
db.student.insert({'name':'赵柳','sex':'女','age':18,'score':77,'address':'东城区'})
db.student.insert({'name':'张军','sex':'男','age':22,'score':87,'address':'海淀区'})
db.student.insert({'name':'王八','sex':'男','age':16,'score':69,'address':'海淀区'})
db.student.insert({'name':'钱石','sex':'女','age':12,'score':83,'address':'东城区'})
db.student.insert({'name':'丁磊','sex':'男','age':15,'score':90,'address':'朝阳区'})
db.student.insert({'name':'胡军','sex':'男','age':18,'score':100,'address':'朝阳区'})

1>查询姓名为张三的数据

db.student.find({'name':'张三'}).pretty()
2>查询性别是男的数据
db.student.find({'sex':'男'}).pretty()

3>查询年龄大于19岁的数据

db.student.find({'age':{'$gt':19}}).pretty()

4>查询成绩大于等于60分的学生

db.student.find({'score':{'$gte':60}}).pretty()

5>查询性别不是王五的信息

db.student.find({'name':{'$ne':'王五'}}).pretty()

(3)逻辑查询

逻辑运算:与($and),或($or),非($not\$nor)

1>查询年龄在19-22之间的数据,"and"是最容易的,用","分割就可以

db.student.find({'age':{'$gte':19,'$lte':22}}).pretty()

2>查询年龄不是22岁的数据,$ne一般用来取反

db.student.find({'age':{'$ne':22}}).pretty()

3>查询年龄大于17岁或者成绩大于60分的信息

db.student.find({'$or':[
    {'age':{'$gt':19}},
    {'score':{'$gt':60}}
]}).pretty()

4>或的求反操作

db.student.find({'$nor':[
    {'age':{'$gt':19}},
    {'score':{'$gt':60}}
]}).pretty()

(4)范围查询

只要是数据库,肯定会存在有"$in"(在范围之中)   "$ini"(不在范围之中)

1>查询姓名是"张三","李四","王五"的信息

db.student.find({'name':{'$in':['张三','李四','王五']}}).pretty()

2>不在范围的查询

db.student.find({'name':{'$nin':['张三','李四','王五']}}).pretty()

(5)数组查询

在MongoDB数据库中是支持数组保存的,一旦支持了数组保存,就需要针对数组的数据进行匹配

保存一部分数组内容,数据模型

db.student.insert({'name':'小明 - A','sex':'男','age':18,'score':100,'address':'朝阳区','course':['英语','语文','数学','历史','音乐','政治','体育']})
db.student.insert({'name':'小明 - B','sex':'男','age':18,'score':100,'address':'朝阳区','course':['英语','政治','体育']})
db.student.insert({'name':'小明 - C','sex':'男','age':18,'score':100,'address':'朝阳区','course':['英语','音乐','政治','体育']})
db.student.insert({'name':'小明 - D','sex':'男','age':18,'score':100,'address':'朝阳区','course':['历史','音乐','政治','体育']})
db.student.insert({'name':'小明 - E','sex':'男','age':18,'score':100,'address':'朝阳区','course':['语文','数学','政治','体育']})
数组运算符:$all    $size    $slice    $elemMatch

1>查询同时参加语文和数学的课程的学生

    现在两个数组内容都需要,所以使用"$all,[内容1,内容2,内容3......]"

db.student.find({'course':{'$all':['语文','数学']}})

    虽然"$all"计算可以用于数组上,但是也可以用于一个数据的匹配上

2>查询地址为海定区的学生数据

db.student.find({'address':{'$all':['海淀区']}}).pretty()
3>查询数组中第二个内容为音乐的信息(index=1,索引从0开始)
db.student.find({'course.1':'音乐'}).pretty()

4>查询出只参加四门课程的学生信息

    使用"$size"来进行数量的控制

db.student.find({'course':{'$size':4}}).pretty()

5>返回年龄为18岁所有学生信息,但是要求只显示两门课程,只取得前两门,负数倒去,中间[1,2],跳过1个,读后2个

    使用"slice"进行控制

db.student.find({'age':18},{'course':{'$slice':2}}).pretty()
未待完续........


猜你喜欢

转载自blog.csdn.net/baoshuowl/article/details/79767168
今日推荐