MongoDB基本语法
连接远程MongoDB
# -*- coding:utf-8 -*-
# 连接 Mongo 数据库
from pymongo import MongoClient
from mongodb_helper import host, port, database, username, password, collection
host = host
port = port
username = username
password = password
dbname = database
collection = collection
# 建立和数据库系统的连接,创建Connection时,指定host及port参数
client = MongoClient(host, port)
# 连接目标数据库
db = client[dbname]
# 数据库用户验证
db.authenticate(username, password)
# 连接集合
col = db[collection]
# 打印集合第1条记录
print(col.find_one())
数据类型
Object ID
: 文档ID
String
:字符串,最常用,必须是有效的UTF-8
Boolean
:存储一个布尔值,true或false
Integer
:整数可以是32位,也可以是64位,取决于服务器
Double
:存储浮点型数值
Arrays
:数组或列表,多个值存储到一个键
Object
:用于嵌入式的文档,即一个值位一个文档
Null
:存储Null值
Timestamp
:时间戳,表示从1970-1-1到现在的总秒数
Data
:存储当前日期或时间的UNIX时间格式
查
查看所有的数据库
show dbs
show databases
查看当前所在的数据库名称
db
使用某个数据库
use dbname
查看集合
show collections
条件查询
查询全部文档
db.test1000.find()
查询满足条件的全部文档
查询age
为18的全部文档
db.test1000.find({age:18})
“单字段满足条件”的第一条文档
查询age
为18的第一条文档
db.test1000.findOne({age:18})
“单字段大于等于”条件查询
查询age
大于等于18的所有文档
db.test1000.find({age:{$gte:18}})
“单字段多个等于”条件查询
查询age
等于18,20,40的全部文档
db.test1000.find({age:{$in:[18,20,40]}})
“单字段多个不等于”条件查询
查询age
不等于18,20,40的全部文档
db.test1000.find({age:{$nin:[18,20,40]}})
“多字段条件【且】”条件查询
多条件查询,and
db.test1000.find({age:18, name:"Tom"})
“多字段条件【或】”条件查询
多条件查询,or
db.test1000.find($or:[{age:18},{name:"Tom"}])
limit()
查询前两个
db.test1000.find().limit(2)
skip()
查询跳过前两个
db.test1000.find().skip(2)
自定义查询
自定义查询:使用$where
后面写一个函数,返回满足条件的数据查询年龄大于30的学生
db.test1000.find({$where:function(){return this.age>30;}})
设置查询结果显示的字段信息
查询结果过滤:查询age
大于等于15的文档,显示name
字段,不显示_id
字段。(只有_id
字段可以设置为0,其他的不可以,不写即默认不显示)
db.test1000.find({age:{$get:15}}, {name:1, _id:0})
查询结果排序
排序方法sort()
,用于对结果进行排序, 1
表示升序,-1
表示降序
db.test1000.find().sort({name:-1, age:1})
文档数量统计
统计个数count()
方法
db.test1000.find().count()
文档数量条件统计
直接使用count()
是可以加条件的,但是在find()
后面使用count(条件)
是不执行这个条件的
db.test1000.count({age:{$gt:18}})
指定字段去重
去重:对于某个字段进行去重
db.test1000.distinct("age")
指定字段条件去重
筛选去重
db.test1000.distinct("age", {age:{$gt:20}})
比较运算符
等于
:冒号就使等于
小于
:$lt
, less than
大于
:$gt
, greater than
小于等于
:$lte
, less than equal
大于等于
:$gte
, greater than equal
不等于
:$ne
, not equal
删
删除当前的数据库
切换到某个数据库时才可以使用
db.dropDatabase()
删除集合
sb.CollectionName.drop()
删除文档
语法:db.CollectionName.remove(<条件>, [{justOne:<boolean>}])
,此处的布尔值默认为false
只删除一条,必须使布尔值为true
db.test1000.remove({name:"Tom"}, {justOne:true})
全部删除,不必加justOne
条件,justOne
默认为false
db.test1000.remove({name:"Tom"})
增
创建数据库
无需创建数据库,直接使用就会切换到这个数据库,插入数据时会创建这个数据库,否则不创建。
use dbname
创建集合+插入数据
向不存在的集合中第一次插入数据时,集合会自动创建出来。也可手动创建集合。
insert()
方法会自动生成一个_id
,待插入文档也可自带_id
,如果自带的_id
已存在,则插入失败。_id
是做为唯一标识符存在的,不可重复。
db.test1000.insert({"name":"xiaoming", "age":10})
键可以不加引号
db.test1000.insert(name:"Tom", age:18)
save()
方法,如果文档的_id
已经存在则覆盖(更新)之前的文档内容,如果不存在则添加。
db.test1000.save(name:"Jack", age:16)
改
db.test1000.update(<条件>,<更新内容>,[multi:true])
更新文档的全部内容(替换)
这条语句会找到满足条件的第一条{name:"Tom"}
的文档,然后将这条文档更新为后面的更新内容{name:"TOM"}
db.test1000.update({name:"Tom"}, {name:"TOM"})
更新文档的指定内容(更新)
这条语句会找到满足条件的第一条{name:"Tom"}
的文档,然后把文档中的name
字段修改为TOM
,其他字段不做处理。
db.test1000.update({name:"Tom"}, $set:{name:"TOM"})
更新文档的多条指定内容(更新)
multi
只在与$
搭配时才生效。找到满足条件{name:"Tom"}
的全部文档,并更新其中的name
字段为TOM
db.test1000.update({name:"Tom"}, $set:{name:"TOM"}, {multi:true})