MongoDB整理

本贴最后更新于 3180 天前,其中的信息可能已经时过境迁

说明一下,资料是群里的哥们上传的,看了一遍觉得不错,贴来和大家共享。


1、登录和退出


mongo命令直接加MongoDB服务器的IP地址(比如:mongo 10.77.20.xx),就可以利用Mongo的默认端口号(27017)登陆Mongo,然后便能够进行简单的命令行操作。


至于退出,直接exit,然后回车就好了。


$ mongo 10.77.20.xx 


MongoDB shell version: 2.0.4 


connecting to: 10.77.20.xx/test 


> show collections 


> exit 


bye 


从以上可以看出,登录后mongo会自动连上一个名为test的数据库。如果这个数据库不存在,那么mongo会自动建立一个名为test的数据库。上面的例子,由于Mongo服务器上没有名为testdb,因此,mongo新建了一个空的名为testdb。其中,没有任何collection


2database级操作


2.1 查看服务器上的数据库 


> show dbs 


admin   (empty) 


back_up (empty) 


blogtest    0.203125GB 


local   44.056640625GB 


test    (empty) 


2.2 切换数据库 


切换到blogtest数据库(从默认的test数据库) 


> use blogtest 


switched to db blogtest 


mongo中,db代表当前使用的数据库。这样,db就从原来的test,变为现在的blogtest数据库。 


2.3 查看当前数据库中的所有集合 


> show collections 


book 


system.indexes 


user 


2.4 创建数据库 


mongo中创建数据库采用的也是use命令,如果use后面跟的数据库名不存在,那么mongo将会新建该数据库。不过,实际上只执行use命令后,mongo是不会新建该数据库的,直到你像该数据库中插入了数据。 


> use test2 


switched to db test2 


> show dbs 


admin   (empty) 


back_up (empty) 


blogtest    0.203125GB 


local   44.056640625GB 


test    (empty) 


到这里并没有看到刚才新建的test2数据库。 


> db.hello.insert({"name":"testdb"}) 


该操作会在test2数据库中新建一个hello集合,并在其中插入一条记录。 


> show dbs 


admin   (empty) 


back_up (empty) 


blogtest    0.203125GB 


local   44.056640625GB 


test    (empty) 


test2   0.203125GB 


> show collections 


hello 


system.indexes 


这样,便可以看到mongo的确创建了test2数据库,其中有一个hello集合。 


2.5 删除数据库 


> db.dropDatabase() 


{ "dropped" : "test2", "ok" : 1 } 


> show dbs 


admin   (empty) 


back_up (empty) 


blogtest    0.203125GB 


local   44.056640625GB 


test    (empty) 


2.6 查看当前数据库 


> db 


test2 


可以看出删除test2数据库之后,当前的db还是指向它,只有当切换数据库之后,test2才会彻底消失。 


3collection级操作


3.1 新建collection 


> db.createCollection("Hello") 


{ "ok" : 1 } 


> show collections 


Hello 


system.indexes 


从上面2.4也可以看出,直接向一个不存在的collection中插入数据也能创建一个collection 


> db.hello2.insert({"name":"lfqy"}) 


> show collections 


Hello 


hello2 


system.indexes 


3.2 删除collection 


> db.Hello.drop() 


true 


返回true说明删除成功,false说明没有删除成功。 


> db.hello.drop() 


false 


不存在名为hellocollection,因此,删除失败。 


3.3 重命名collection  


hello2集合重命名为HELLO 


> show collections 


hello2 


system.indexes 


> db.hello2.renameCollection("HELLO") 


{ "ok" : 1 } 


> show collections 


HELLO 


system.indexes 


3.4 查看当前数据库中的所有collection 


>show collections 


3.5 索引操作 


HELLO集合上,建立对ID字段的索引,1代表升序。 


>db.HELLO.ensureIndex({ID:1}) 


HELLO集合上,建立对ID字段、Name字段和Gender字段建立索引 


>db.HELLO.ensureIndex({ID:1,Name:1,Gender:-1}) 


查看HELLO集合上的所有索引 


>db.HELLO.getIndexes() 


删除索引用db.collection.dropIndex(),有一个参数,可以是建立索引时指定的字段,也可以是getIndex看到的索引名称。 


>db.HELLO.dropIndex( "IDIdx" ) 


>db.HELLO.dropIndex({ID:1}) 


3.6 为集合中的每一条记录添加一个字段 


user集合中的每一条记录添加一个名为ex的字段,并赋值为barrymore 


db.user.update({},{$set:{"ex":"barrymore"}},false,true) 


3.7 重命名字段 


将集合中的所有记录的gender字段的名字修改为sex 


db.user.update({},{$rename:{"gender":"sex"}},false,true) 


3.8 删除字段 


删除集合中所有记录的ex字段 


db.user.update({},{"$unset":{"ex":1}},false,true) 


上面的操作中用到了一个比较常用的update方法,其参数格式如下:


db.collection.update(criteria, objNew, upsert, multi )


criteria:update的查询条件,类似sql update查询内where后面的


objNew:update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的。


upsert : 如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。


multi : mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。


4MongoDB 数据库操作


1. 连接数据库


import pymongo


conn = pymongo.Connection() # 连接本机数据库


# conn = pymongo.Connection(host="192.168.1.202") # 连接指定IP的数据库


db = conn.test # 进入指定名称的数据库


users = db.users # 获取数据库里的 users 集合


users = db['users'] # 获取数据库里的 users 集合,也可以用字典来获取


2. 插入


u = dict(name = "user1", age = 23)


# db.users.save(u) # save 也可以插入


db.users.insert(u) # 将数据插入到 users 集合


3. 更新


# 更新指定一条记录


u2 = db.users.find_one({"name":"user9"})


u2['age'] += 3


db.users.save(u2)


# 更新多条记录


db.users.update({"name":"user1"}, {"$set":{"age":100, "sex":0}}) # update users set age = 100, sex = 0 where name = 'user1'


db.users.update({}, {"$inc":{"age":10}}, multi=True) # update users set age = age + 10


db.users.update({"name":"user1"}, {"$inc":{"age":10}, "$set":{"sex":1}}) # update users set age = age + 10, sex = 1 where name = 'user1'


# update() 有几个参数需要注意:


db.集合名.update(criteria, objNew, upsert, mult)


criteria: 需要被更新的条件表达式


objNew: 更新表达式


upsert: 如目标记录不存在,是否插入新文档。


multi: 是否更新多个文档。


4. 删除


db.users.drop()  # 删除集合


# remove() 用于删除单个或全部文档,删除后的文档无法恢复。


id = db.users.find_one({"name":"user2"})["_id"]


db.users.remove(id)  # 根据 id 删除一条记录


db.users.remove()  # 删除集合里的所有记录


db.users.remove({'yy':5}) # 删除yy=5的记录


5. 查询


# 查询 age 小于 15


for u in db.users.find({"age":{"$lt":15}}): print u


5.1 查询一条记录


# 查询 name 等于 user8


for u in db.users.find({"name":"user8"}): print u


# 获取查询的一个


u2 = db.users.find_one({"name":"user9"}) # 查不到时返回 None


print u2


5.2 查询特定键 (fields)


# select name, age from users where age = 21


for u in db.users.find({"age":21}, ["name", "age"]): print u


for u in db.users.find(fields = ["name", "age"]): print u


5.3 排序(SORT)


pymongo.ASCENDING  # 也可以用 1 来代替


pymongo.DESCENDING # 也可以用 -1 来代替


for u in db.users.find().sort([("age", pymongo.ASCENDING)]): print u   # select * from 集合名 order by 1


for u in db.users.find().sort([("age", pymongo.DESCENDING)]): print u  # select * from 集合名 order by 1 desc


for u in db.users.find().sort([("1", pymongo.ASCENDING), ("2", pymongo.DESCENDING)]): print u # select * from 集合名 order by 1 asc, 2 desc


for u in db.users.find(sort = [("1", pymongo.ASCENDING), ("2", pymongo.DESCENDING)]): print u # sort 的另一种写法


for u in db.users.find({"name":"user9"}, sort=[['name',1],['sex',1]], fields = ["name", "age", 'sex']): print u  # 组合写法


5.4 从第几行开始读取(SLICE),读取多少行(LIMIT)


# select * from 集合名 skip 2 limit 3


# MySQL 的写法: select * from 集合名 limit 2, 3


for u in db.users.find().skip(2).limit(3): print u


for u in db.users.find(skip = 2, limit = 3): print u


# 可以用切片代替 skip & limit (mongo 中的 $slice 貌似有点问题)


for u in db.users.find()[2:5]: print u


# 单独的写


for u in db.users.find().skip(2): print u


for u in db.users.find(skip=1): print u


for u in db.users.find().limit(5): print u


for u in db.users.find(limit = 3): print u


5.5 多条件查询(Conditional Operators)    # like 的可使用正则表达式查询


# select * from users where name = 'user3' and age > 12 and age < 15


for u in db.users.find({'age': {'$gt': 12, '$lt': 15}, 'name': 'user3'}): print u


# select * from users where name = 'user1' and age = 21


for u in db.users.find({"age":21, "name":"user1"}): print u


5.6 IN


for u in db.users.find({"age":{"$in":(23, 26, 32)}}): print u   # select * from users where age in (23, 26, 32)


for u in db.users.find({"age":{"$nin":(23, 26, 32)}}): print u  # select * from users where age not in (23, 26, 32)


5.7 统计总数(COUNT)


print(db.users.count())  # select count(*) from users


print(db.users.find({"age":{"$gt":30}}).count()) # select count(*) from users where age > 30


5.8 OR


for u in db.users.find({"$or":[{"age":25}, {"age":28}]}): print u  # select * from 集合名 where 1 = 1 or 1 = 2


for u in db.users.find({"$or":[{"age":{"$lte":23}}, {"age":{"$gte":33}}]}): print u  # select * from 集合名 where 1 <= 1 or 1 >= 2


6. 是否存在 (exists)


db.users.find({'sex':{'$exists':True}})  # select * from 集合名 where exists 1


db.users.find({'sex':{'$exists':False}}) # select * from 集合名 where not exists 1


7. 正则表达式查询


for u in db.users.find({"name" : {"$regex" : r"(?i)user[135]"}}, ["name"]): print u # 查询出 name user1, user3, user5


8. 多级路径的元素值匹配


Document 采取 JSON-like 这种层级结构,因此我们可以直接用嵌入(Embed)代替传统关系型数据库的关联引用(Reference)


MongoDB 支持以 "." 分割的 namespace 路径,条件表达式中的多级路径须用引号


# 如果键里面包含数组,只需简单匹配数组属性是否包含该元素即可查询出来


db.集合名.find_one({'address':"address1"}) # address 是个数组,匹配时仅需包含有即可


# 查询结果如:{"_id" : ObjectId("4c479885089df9b53474170a"), "name" : "user1", "address" : ["address1", "address2"]}


# 条件表达式中的多级路径须用引号, "." 分割


u = db.集合名.find_one({"im.qq":12345678})


# 查询结果如:{"_id" : ObjectId("4c479885089df9b53474170a"), "name" : "user1", "im" : {"msn" : "user1@hotmail.com", "qq" : 12345678}}


print u['im']['msn']  #显示: user1@hotmail.com


# 多级路径的更新


db.集合名.update({"im.qq":12345678}, {'$set':{"im.qq":12345}})


# 查询包含特定键的


for u in db.users.find({"im.qq":{'$exists':True}}, {"im.qq":1}): print u


# 显示如: { "_id" : ObjectId("4c479885089df9b53474170a"), "im" : { "qq" : 12345 } }


for u in db.users.find({'data':"abc"}): print u


# 显示如: { "_id" : ObjectId("4c47a481b48cde79c6780df5"), "name" : "user8", "data" : [ { "a" : 1, "b" : 10 }, 3, "abc" ] }


for u in db.users.find({'data':{'$elemMatch':{'a':1, 'b':{'$gt':5}}}}): print u


# 显示如: { "_id" : ObjectId("4c47a481b48cde79c6780df5"), "name" : "user8", "data" : [ { "a" : 1, "b" : 10 }, 3, "abc" ] }


{data:"abc"} 仅简单匹配数组属性是否包含该元素。$elemMatch 则可以处理更复杂的元素查找条件。当然也可以写成如下方式:


db.集合名.find({"data.a":1, "data.b":{'$gt':5}})


对数组, 还可以直接使用序号进行操作:


db.集合名.find({"data.1":3}) # 序号从0开始


# 如集合的一列内容


{"classifyid":"test1",


"keyword":[


{"name":'test1', # 将修改此值为 test5 (数组下标从0开始,下标也是用点)


"frequence":21,


},


{"name":'test2', # 子表的查询,会匹配到此值


"frequence":50,


},


]


}


# 子表的修改(子表的其它内容不变)


db.集合名.update({"classifyid":"test1"}, {"$set":{"keyword.0.name":'test5'}})


# 子表的查询


db.集合名.find({"classifyid":"test1", "keyword.0.name":"test2"})


操作符


$lt         小于


$lte        小于等于


$gt         大于


$gte        大于等于


$ne         不等于


$in         in  检查目标属性值是条件表达式中的一员


$nin        not in


$set        set(用于 update 语句)


$unset      $set 相反,表示移除文档属性。


$inc        += (用于 update 语句)


$exists     exists (判断是否存在,仅有 True False 两个值)


$all        属性值包含全部条件元素,注意和 $in 的区别


$size       匹配数组属性元素的数量


$type       判断属性类型


$regex      正则表达式查询


$elemMatch  子属性里的查询


$push       向数组属性添加元素


$pushAll    向数组属性添加元素


$addToSet   $push 类似,不过仅在该元素不存在时才添加 (Set 表示不重复元素集合)


$each       添加多个元素用


$pop        移除数组属性的元素(按数组下标移除)


$pull       按值移除


$pullAll    移除所有符合提交的元素


$where      JS 代码来代替有些丑陋的 $lt$gt


5Operator


(1) $all: 判断数组属性是否包含全部条件。


db.users.insert({'name':"user3", 'data':[1,2,3,4,5,6,7]})


db.users.insert({'name':"user4", 'data':[1,2,3]})


for u in db.users.find({'data':{'$all':[2,3,4]}}): print u


# 显示: { "_id" : ObjectId("4c47a133b48cde79c6780df0"), "name" : "user3", "data" : [ 1, 2, 3, 4, 5, 6, 7 ] }


注意和 $in 的区别。$in 是检查目标属性值是条件表达式中的一员,而 $all 则要求属性值包含全部条件元素。


(2) $size: 匹配数组属性元素数量。


for u in db.users.find({'data':{'$size':3}}): print u


# 只显示匹配此数组数量的: { "_id" : ObjectId("4c47a13bb48cde79c6780df1"), "name" : "user4", "data" : [ 1, 2, 3 ] }


(3) $type: 判断属性类型。


for u in db.users.find({'t':{'$type':1}}): print u  # 查询数字类型的


for u in db.users.find({'t':{'$type':2}}): print u  # 查询字符串类型的


类型值:


double:1


string: 2


object: 3


array: 4


binary data: 5


object id: 7


boolean: 8


date: 9


null: 10


regular expression: 11


javascript code: 13


symbol: 14


javascript code with scope: 15


32-bit integer: 16


timestamp: 17


64-bit integer: 18


min key: 255


max key: 127


(4) $not: 取反,表示返回条件不成立的文档。


似乎只能跟正则和 $mod 一起使用????


# 还不知如何使用


(5) $unset: $set 相反,表示移除文档属性。


for u in db.users.find({'name':"user1"}): print u


# 显示如: { "_id" : ObjectId("4c479885089df9b53474170a"), "name" : "user1", "age" : 15, "address" : [ "address1", "address2" ] }


db.users.update({'name':"user1"}, {'$unset':{'address':1, 'age':1}})


for u in db.users.find({'name':"user1"}): print u


# 显示如: { "_id" : ObjectId("4c479885089df9b53474170a"), "name" : "user1" }


(6) $push: $ pushAll 都是向数组属性添加元素。# 好像两者没啥区别


for u in db.users.find({'name':"user1"}): print u


# 显示如: { "_id" : ObjectId("4c479885089df9b53474170a"), "age" : 15, "name" : "user1" }


db.users.update({'name':"user1"}, {'$push':{'data':1}})


for u in db.users.find({'name':"user1"}): print u


# 显示如: { "_id" : ObjectId("4c479885089df9b53474170a"), "age" : 15, "data" : [ 1 ], "name" : "user1" }


db.users.update({'name':"user1"}, {'$pushAll':{'data':[2,3,4,5]}})


for u in db.users.find({'name':"user1"}): print u


# 显示如: { "_id" : ObjectId("4c479885089df9b53474170a"), "age" : 15, "data" : [ 1, 2, 3, 4, 5 ], "name" : "user1" }


(7) $addToSet: $push 类似,不过仅在该元素不存在时才添加 (Set 表示不重复元素集合)


db.users.update({'name':"user2"}, {'$unset':{'data':1}})


db.users.update({'name':"user2"}, {'$addToSet':{'data':1}})


db.users.update({'name':"user2"}, {'$addToSet':{'data':1}})


for u in db.users.find({'name':"user2"}): print u


# 显示: { "_id" : ObjectId("4c479896089df9b53474170b"), "data" : [ 1 ], "name" : "user2" }


db.users.update({'name':"user2"}, {'$push':{'data':1}})


for u in db.users.find({'name':"user2"}): print u


# 显示: { "_id" : ObjectId("4c479896089df9b53474170b"), "data" : [ 1, 1 ], "name" : "user2" }


要添加多个元素,使用 $each


db.users.update({'name':"user2"}, {'$addToSet':{'data':{'$each':[1,2,3,4]}}})


for u in db.users.find({'name':"user2"}): print u


# 显示: {u'age': 12, u'_id': ObjectId('4c479896089df9b53474170b'), u'data': [1, 1, 2, 3, 4], u'name': u'user2'}


# 貌似不会自动删除重复


(8) $each 添加多个元素用。


db.users.update({'name':"user2"}, {'$unset':{'data':1}})


db.users.update({'name':"user2"}, {'$addToSet':{'data':1}})


for u in db.users.find({'name':"user2"}): print u


# 显示: { "_id" : ObjectId("4c479896089df9b53474170b"), "data" : [ 1 ], "name" : "user2" }


db.users.update({'name':"user2"}, {'$addToSet':{'data':{'$each':[1,2,3,4]}}})


for u in db.users.find({'name':"user2"}): print u


# 显示: {u'age': 12, u'_id': ObjectId('4c479896089df9b53474170b'), u'data': [1, 2, 3, 4], u'name': u'user2'}


db.users.update({'name':"user2"}, {'$addToSet':{'data':[1,2,3,4]}})


for u in db.users.find({'name':"user2"}): print u


# 显示: { "_id" : ObjectId("4c479896089df9b53474170b"), "data" : [ 1, 2, 3, 4, [ 1, 2, 3, 4 ] ], "name" : "user2" }


db.users.update({'name':"user2"}, {'$unset':{'data':1}})


db.users.update({'name':"user2"}, {'$addToSet':{'data':[1,2,3,4]}})


for u in db.users.find({'name':"user2"}): print u


# 显示: { "_id" : ObjectId("4c47a133b48cde79c6780df0"), "data" : [ [1, 2, 3, 4] ], "name" : "user2" }


(9) $pop: 移除数组属性的元素(按数组下标移除)$pull 按值移除,$pullAll 移除所有符合提交的元素。


db.users.update({'name':"user2"}, {'$unset':{'data':1}})


db.users.update({'name':"user2"}, {'$addToSet':{'data':{'$each':[1, 2, 3, 4, 5, 6, 7, 2, 3 ]}}})


for u in db.users.find({'name':"user2"}): print u


# 显示: { "_id" : ObjectId("4c47a133b48cde79c6780df0"), "data" : [ 1, 2, 3, 4, 5, 6, 7, 2, 3 ], "name" : "user2" }


db.users.update({'name':"user2"}, {'$pop':{'data':1}}) # 移除最后一个元素


for u in db.users.find({'name':"user2"}): print u


# 显示: { "_id" : ObjectId("4c47a133b48cde79c6780df0"), "data" : [ 1, 2, 3, 4, 5, 6, 7, 2 ], "name" : "user2" }


db.users.update({'name':"user2"}, {'$pop':{'data':-1}}) # 移除第一个元素


for u in db.users.find({'name':"user2"}): print u


# 显示: { "_id" : ObjectId("4c47a133b48cde79c6780df0"), "data" : [ 2, 3, 4, 5, 6, 7, 2 ], "name" : "user2" }


db.users.update({'name':"user2"}, {'$pull':{'data':2}}) # 移除全部 2


for u in db.users.find({'name':"user2"}): print u


# 显示: { "_id" : ObjectId("4c47a133b48cde79c6780df0"), "data" : [ 3, 4, 5, 6, 7 ], "name" : "user2" }


db.users.update({'name':"user2"}, {'$pullAll':{'data':[3,5,6]}}) # 移除 3,5,6


for u in db.users.find({'name':"user2"}): print u


# 显示: { "_id" : ObjectId("4c47a133b48cde79c6780df0"), "data" : [ 4, 7 ], "name" : "user2" }


(10) $where: JS 代码来代替有些丑陋的 $lt$gt


MongoDB 内置了 Javascript Engine (SpiderMonkey)。可直接使用 JS Expression,甚至使用 JS Function 写更复杂的 Code Block


db.users.remove() # 删除集合里的所有记录


for i in range(10):


db.users.insert({'name':"user" + str(i), 'age':i})


for u in db.users.find(): print u


# 显示如下:


{ "_id" : ObjectId("4c47b3372a9b2be866da226e"), "name" : "user0", "age" : 0 }


{ "_id" : ObjectId("4c47b3372a9b2be866da226f"), "name" : "user1", "age" : 1 }


{ "_id" : ObjectId("4c47b3372a9b2be866da2270"), "name" : "user2", "age" : 2 }


{ "_id" : ObjectId("4c47b3372a9b2be866da2271"), "name" : "user3", "age" : 3 }


{ "_id" : ObjectId("4c47b3372a9b2be866da2272"), "name" : "user4", "age" : 4 }


{ "_id" : ObjectId("4c47b3372a9b2be866da2273"), "name" : "user5", "age" : 5 }


{ "_id" : ObjectId("4c47b3372a9b2be866da2274"), "name" : "user6", "age" : 6 }


{ "_id" : ObjectId("4c47b3372a9b2be866da2275"), "name" : "user7", "age" : 7 }


{ "_id" : ObjectId("4c47b3372a9b2be866da2276"), "name" : "user8", "age" : 8 }


{ "_id" : ObjectId("4c47b3372a9b2be866da2277"), "name" : "user9", "age" : 9 }


for u in db.users.find({"$where":"this.age > 7 || this.age < 3"}): print u


# 显示如下:


{u'age': 0.0, u'_id': ObjectId('4c47b3372a9b2be866da226e'), u'name': u'user0'}


{u'age': 1.0, u'_id': ObjectId('4c47b3372a9b2be866da226f'), u'name': u'user1'}


{u'age': 2.0, u'_id': ObjectId('4c47b3372a9b2be866da2270'), u'name': u'user2'}


{u'age': 8.0, u'_id': ObjectId('4c47b3372a9b2be866da2276'), u'name': u'user8'}


{u'age': 9.0, u'_id': ObjectId('4c47b3372a9b2be866da2277'), u'name': u'user9'}


for u in db.users.find().where("this.age > 7 || this.age < 3"): print u


# 显示如下:


{u'age': 0.0, u'_id': ObjectId('4c47b3372a9b2be866da226e'), u'name': u'user0'}


{u'age': 1.0, u'_id': ObjectId('4c47b3372a9b2be866da226f'), u'name': u'user1'}


{u'age': 2.0, u'_id': ObjectId('4c47b3372a9b2be866da2270'), u'name': u'user2'}


{u'age': 8.0, u'_id': ObjectId('4c47b3372a9b2be866da2276'), u'name': u'user8'}


{u'age': 9.0, u'_id': ObjectId('4c47b3372a9b2be866da2277'), u'name': u'user9'}


# 使用自定义的 function, javascript语法的


for u in db.users.find().where("function() { return this.age > 7 || this.age < 3;}"): print u


# 显示如下:


{u'age': 0.0, u'_id': ObjectId('4c47b3372a9b2be866da226e'), u'name': u'user0'}


{u'age': 1.0, u'_id': ObjectId('4c47b3372a9b2be866da226f'), u'name': u'user1'}


{u'age': 2.0, u'_id': ObjectId('4c47b3372a9b2be866da2270'), u'name': u'user2'}


{u'age': 8.0, u'_id': ObjectId('4c47b3372a9b2be866da2276'), u'name': u'user8'}


{u'age': 9.0, u'_id': ObjectId('4c47b3372a9b2be866da2277'), u'name': u'user9'}


6、封装查询工具类


{"age":{"$lt":15}} 这样的查询语法实在太另类,忒难看了。试试封装查询工具类吧。原理很简单,就是重载操作符。


from pymongo import *


conn = Connection()


db = conn.test


# 插入数据


for i in range(10):


u = dict(name = "user" + str(i), age = 10 + i)


db.users.insert(u)


# 查询 age 小于 15


for u in db.users.find({"age":{"$lt":15}}): print u


# 查询结果如下:


{u'age': 10, u'_id': ObjectId('4c9b7465499b1408f1000000'), u'name': u'user0'}


  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    90 引用 • 59 回帖 • 4 关注

相关帖子

回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...