在上一节一起学习了增删查改的基本方法,然而对于关系类数据库比如mysql来说还有条件查询等等,现在我们来深入学习。
INSERT操作:
对于单行插入数据来说,上一节已经研究过,不过当我们需要批量插入该怎么办呢?
在mongodb里面没有批量插入的语句,因此我们可以使用高级语言中的for循环方法,比如用python编写一个简单的mongodb的操作语句,其中加入for循环:
import pymongo
conn = pymongo.Connection('127.0.0.1',27017)
db=conn.test
list=['Trony','Tom','Mary','Jacky','Jhonny']
for i in list:
db.user.insert({"name":i})
其结果是这样的,表明for循环确实可是实现mongodb的批量插入,实践证明~
FIND操作:
Selector是对于mongo来说类似sql中使用的where语句。它允许我们执行如下操作: 指定必须匹配,类似, AND语句 指定可选匹配,类似, OR语句 指定必须存在。
我们首先在db.user中插入这些数据
db.user.insert({
first: 'matthew',
last: 'setter',
dob: '21/04/1978',
gender: 'm',
hair_colour: 'brown',
occupation: 'developer',
nationality: 'australian',
age:'20'
});
db.user.insert({
first: 'james',
last: 'caan',
dob: '26/03/1940',
gender: 'm',
hair_colour: 'brown',
occupation: 'actor',
nationality: 'american',
age:'40'
});
db.user.insert({
first: 'arnold',
last: 'schwarzenegger',
dob: '03/06/1925',
gender: 'm',
hair_colour: 'brown',
occupation: 'actor',
nationality: 'american',
age:'16'
});
db.user.insert({
first: 'tony',
last: 'curtis',
dob: '21/04/1978',
gender: 'm',
hair_colour: 'brown',
occupation: 'developer',
nationality: 'american',
age:'38'
});
db.user.insert({
first: 'jamie lee',
last: 'curtis',
dob: '22/11/1958',
gender: 'f',
hair_colour: 'brown',
occupation: 'actor',
nationality: 'american',
age:'27'
});
db.user.insert({
first: 'michael',
last: 'caine',
dob: '14/03/1933',
gender: 'm',
hair_colour: 'brown',
occupation: 'actor',
nationality: 'english',
age:'15'
});
db.user.insert({
first: 'judi',
last: 'dench',
dob: '09/12/1934',
gender: 'f',
hair_colour: 'white',
occupation: 'actress',
nationality: 'english',
age:'42'
});
比方说,我们要找到所有性别是女性的,我们可是使用一下语句
db.user.find({'gender':'f'})
这时在shell里面显示出来的就是所符合的条数。
然后如果我们需要找到性别是男性或者是来自于美国的人,我们需要用到类似与sql中的OR语句
db.user.find({'gender':'m',$or:[{'nationality':'english'}]})
这时会出现我们需要找到的,符合其中一个条件的人数
如果需要知道国籍为english或者american呢?也很简单~如下
db.user.find({'gender':'m',$or:[{'nationality':'english'},{'nationality':'american'}]})
mongodb还有很多的条件,比如:
小于("$lt")、小于等于("$lte")、大于("$gt")、大于等于("$gte")、不等于("$ne")
可以用来作为年龄等方法的查询。
$in 表示在其范围内,$nin则表示不在其范围内
不在次做详细的代码展示了,既然能理解$or那么就一定能理解。
SORT排序:
升序方式:1
降序方式:-1
下面举个例子:
db.user.find({gender: 'm', $or: [{nationality: 'english'}, {nationality: 'american'}]}).sort({nationality: -1});
这是使用国籍的降序排列,我们看看结果
那么如何使得国籍降序,而名字使用升序排列呢?
db.user.find({gender: 'm', $or: [{nationality: 'english'}, {nationality: 'american'}]}).sort({nationality: -1, first: 1})
但是如果是很大的数据我们需要限制返回两条怎么办呢?也很简单,语句如下:
db.user.find({gender: 'm', $or: [{nationality: 'english'}, {nationality: 'american'}]}).limit(2)
使用limit来限制返回条数。
UPDATE操作:
有时候我们需要对指定的条目的其中的一项进行更新修改,需要一种不像上一节中的那么繁琐的方法
比如我们需要更新James Caan的记录,指定头发颜色是灰色,不是褐色。那么我们执行如下:
db.user.update({first: 'james', last: 'caan'}, {$set: {hair_colour: 'black'}})
代码执行完毕后,shell不会提示任何成功或者失败的消息,这时我们需要再进行查看一下
db.user.find({first: 'james', last: 'caan'})
这时,我们可以看到james caan的头发颜色变了~~