mongodb

mongodb


mongdb的优势

  • 易扩展:\color{red}{易扩展:} NoSQL数据库种类繁多,但是⼀个共同的特点都是去掉关系数据库的关系型特性。 数据之间⽆关系, 这样就⾮常容易扩展
  • ⼤数据量,⾼性能:\color{red}{⼤数据量, ⾼性能:} NoSQL数据库都具有⾮常⾼的读写性能, 尤其在⼤数据量下, 同样表现优秀。 这得益于它的⽆关系性, 数据库的结构简单
  • 灵活的数据模型:\color{red}{灵活的数据模型:} NoSQL⽆需事先为要存储的数据建⽴字段,随时可以存储⾃定义的数据格式。 ⽽在关系数据库⾥, 增删字段是⼀件⾮常麻烦的事情。 如果是⾮常⼤数据量的表, 增加字段简直就是⼀个噩梦

mongodb数据类型

  • Object ID: ⽂档ID
  • String: 字符串, 最常⽤, 必须是有效的UTF-8
  • Boolean: 存储⼀个布尔值, true或false
  • Integer: 整数可以是32位或64位, 这取决于服务器
  • Double: 存储浮点值
  • Arrays: 数组或列表, 多个值存储到⼀个键
  • Object: ⽤于嵌⼊式的⽂档, 即⼀个值为⼀个⽂档
  • Null: 存储Null值
  • Timestamp: 时间戳, 表示从1970-1-1到现在的总秒数
  • Date: 存储当前⽇期或时间的UNIX时间格式
    创建⽇期语句如下 :参数的格式为YYYY-MM-DD
    new Date(‘2017-12-20’)
  • 注意点
    每个⽂档都有⼀个属性, 为_id, 保证每个⽂档的唯⼀性
    可以⾃⼰去设置_id插⼊⽂档,如果没有提供, 那么MongoDB为每个⽂档提供了⼀个独特的_id, 类型为objectID
    objectID是⼀个12字节的⼗六进制数:
    前4个字节为当前时间戳
    接下来3个字节的机器ID
    接下来的2个字节中MongoDB的服务进程id
    最后3个字节是简单的增量值

插入数据

db.集合名称.insert(document)
db.集合名称.save(document)
db.test0001.insert({“name”: “黄老邪”, “age”: 40})

{ 
    "_id" : ObjectId("5d3eb09925efd79efad25a9a"), 
    "name" : "黄老邪", 
    "age" : 40.0
}

db.test0001.insert({"_id":“0000001”, “name”: “黄老邪”, “age”: 40})

{ 
    "_id" : "0000001", 
    "name" : "黄老邪", 
    "age" : 40.0
}

插⼊⽂档时, 如果不指定_id参数, MongoDB会为⽂档分配⼀个唯⼀的ObjectId
db.test0001.save({“name”: “欧阳锋”, “age”: 40})
insert方法,_id相同会报错,save方法,_id 相同会更新数据

db.test0001.insert({"_id":"0000001", "name": "洪七公", "age": 40})
WriteResult({
	"nInserted" : 0,
	"writeError" : {
		"code" : 11000,
		"errmsg" : "E11000 duplicate key error collection: python.test0001 index: _id_ dup key: { : \"0000001\" }"
	}
})

db.test0001.save({"_id":"0000001", "name": "洪七公", "age": 40})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

修改数据

db.集合名称.update(<query> ,<update>,{multi: <boolean>})
参数query:查询条件
参数update:更新操作符
参数multi:可选, 默认是false,表示只更新找到的第⼀条记录, 值为true表示把满⾜条件的⽂档全部更新

  • 此种方法将删除除了name以外的其他字段
    db.test0001.update({name:“黄老邪”}, {name: “黄药师”}) 更新一条
    更新前
    { 
    "_id" : ObjectId("5d3eb09925efd79efad25a9a"), 
    "name" : "黄老邪",
    "age" : 40
    }
    
    更新后
    { 
    "_id" : ObjectId("5d3eb09925efd79efad25a9a"), 
    "name" : "黄药师",
    "age" : 40
    }
    
  • 此种方法只更新指定的字段
    db.test0001.update({name:“黄老邪”}, {$set: {name: “黄药师”}}) 更新一条
    更新前
    { 
    "_id" : ObjectId("5d3eb09925efd79efad25a9a"), 
    "name" : "黄药师",
    "age" : 40
    }
    
    更新后
    { 
    	"_id" : ObjectId("5d3eb09925efd79efad25a9a"), 
    	"name" : "黄药师"
    }
    
    db.test0001.update({}, {$set: {age: 45}}, {multi: true}) 更新全部
    { 
    "_id" : ObjectId("5d3eaf9825efd79efad25a99"), 
    "name" : "欧阳锋", 
    "age" : "45"
    }
    // ----------------------------------------------
    { 
    "_id" : ObjectId("5d3eb09925efd79efad25a9a"), 
    "name" : "黄药师", 
    "age" : "45"
    }
    // ----------------------------------------------
    { 
    "_id" : "0000001", 
    "name" : "洪七公", 
    "age" : "45"
    }
    

删除数据

db.集合名称.remove(<query>,{justOne: <boolean>})
参数query:可选,删除的⽂档的条件
参数justOne:可选, 如果设为true或1, 则只删除⼀条, 默认false, 表示删除多条
db.test0001.remove({name: “黄药师”}, {justOne: true})

查询数据

db.集合名称.find()

  • 初始化数据
db.test0001.save({"_id":"0000001", "name": "洪七公", "age": 40, "skill": "降龙十八掌", "address": "中原"})
db.test0001.save({"_id":"0000002", "name": "段志兴", "age": 40, "skill": "一阳指", "address": "大理"})
db.test0001.save({"_id":"0000003", "name": "黄药师", "age": 40, "skill": "碧海潮生曲", "address": "桃花岛"})
db.test0001.save({"_id":"0000004", "name": "欧阳锋", "age": 40, "skill": "蛤蟆功", "address": "西域"})
db.test0001.save({"_id":"0000005", "name": "周伯通", "age": 38, "skill": "左右互搏术", "address": "中原"})
db.test0001.save({"_id":"0000006", "name": "郭靖", "age": 20, "skill": "降龙十八掌", "address": "中原"})
db.test0001.save({"_id":"0000007", "name": "黄蓉", "age": 18, "skill": "打狗棒", "address": "桃花岛"})
db.test0001.save({"_id":"0000008", "name": "杨康", "age": 20, "skill": "九阴白骨爪", "address": "金国"})
db.test0001.save({"_id":"0000009", "name": "华珍", "age": 18, "skill": "弓箭", "address": "草原"})
  • 大于,大于等于 $gt,$gte
db.test0001.find({age:{$gt: 20}})
{ 
    "_id" : "0000001", 
    "name" : "洪七公", 
    "age" : 40.0, 
    "skill" : "降龙十八掌", 
    "address" : "中原"
}
// ----------------------------------------------
{ 
    "_id" : "0000002", 
    "name" : "段志兴", 
    "age" : 40.0, 
    "skill" : "一阳指", 
    "address" : "大理"
}
// ----------------------------------------------
{ 
    "_id" : "0000003", 
    "name" : "黄药师", 
    "age" : 40.0, 
    "skill" : "碧海潮生曲", 
    "address" : "桃花岛"
}
// ----------------------------------------------
{ 
    "_id" : "0000004", 
    "name" : "欧阳锋", 
    "age" : 40.0, 
    "skill" : "蛤蟆功", 
    "address" : "西域"
}
// ----------------------------------------------
{ 
    "_id" : "0000005", 
    "name" : "周伯通", 
    "age" : 38.0, 
    "skill" : "左右互搏术", 
    "address" : "中原"
}


db.test0001.find({age:{$gte: 20}})
{ 
    "_id" : "0000001", 
    "name" : "洪七公", 
    "age" : 40.0, 
    "skill" : "降龙十八掌", 
    "address" : "中原"
}
// ----------------------------------------------
{ 
    "_id" : "0000002", 
    "name" : "段志兴", 
    "age" : 40.0, 
    "skill" : "一阳指", 
    "address" : "大理"
}
// ----------------------------------------------
{ 
    "_id" : "0000003", 
    "name" : "黄药师", 
    "age" : 40.0, 
    "skill" : "碧海潮生曲", 
    "address" : "桃花岛"
}
// ----------------------------------------------
{ 
    "_id" : "0000004", 
    "name" : "欧阳锋", 
    "age" : 40.0, 
    "skill" : "蛤蟆功", 
    "address" : "西域"
}
// ----------------------------------------------
{ 
    "_id" : "0000005", 
    "name" : "周伯通", 
    "age" : 38.0, 
    "skill" : "左右互搏术", 
    "address" : "中原"
}
// ----------------------------------------------
{ 
    "_id" : "0000006", 
    "name" : "郭靖", 
    "age" : 20.0, 
    "skill" : "降龙十八掌", 
    "address" : "中原"
}
// ----------------------------------------------
{ 
    "_id" : "0000008", 
    "name" : "杨康", 
    "age" : 20.0, 
    "skill" : "九阴白骨爪", 
    "address" : "金国"
}
  • 小于,小于等于 $lt,$lte
{ 
    "_id" : "0000007", 
    "name" : "黄蓉", 
    "age" : 18.0, 
    "skill" : "打狗棒", 
    "address" : "桃花岛"
}
// ----------------------------------------------
{ 
    "_id" : "0000009", 
    "name" : "华珍", 
    "age" : 18.0, 
    "skill" : "弓箭", 
    "address" : "草原"
}


db.test0001.find({age:{$lte: 20}})
{ 
    "_id" : "0000006", 
    "name" : "郭靖", 
    "age" : 20.0, 
    "skill" : "降龙十八掌", 
    "address" : "中原"
}
// ----------------------------------------------
{ 
    "_id" : "0000007", 
    "name" : "黄蓉", 
    "age" : 18.0, 
    "skill" : "打狗棒", 
    "address" : "桃花岛"
}
// ----------------------------------------------
{ 
    "_id" : "0000008", 
    "name" : "杨康", 
    "age" : 20.0, 
    "skill" : "九阴白骨爪", 
    "address" : "金国"
}
// ----------------------------------------------
{ 
    "_id" : "0000009", 
    "name" : "华珍", 
    "age" : 18.0, 
    "skill" : "弓箭", 
    "address" : "草原"
}
  • 不等于 $ne
db.test0001.find({age:{$nin: [18, 20]}})
db.test0001.find({age:{$ne: 40}})
{ 
    "_id" : "0000005", 
    "name" : "周伯通", 
    "age" : 38.0, 
    "skill" : "左右互搏术", 
    "address" : "中原"
}
// ----------------------------------------------
{ 
    "_id" : "0000006", 
    "name" : "郭靖", 
    "age" : 20.0, 
    "skill" : "降龙十八掌", 
    "address" : "中原"
}
// ----------------------------------------------
{ 
    "_id" : "0000007", 
    "name" : "黄蓉", 
    "age" : 18.0, 
    "skill" : "打狗棒", 
    "address" : "桃花岛"
}
// ----------------------------------------------
{ 
    "_id" : "0000008", 
    "name" : "杨康", 
    "age" : 20.0, 
    "skill" : "九阴白骨爪", 
    "address" : "金国"
}
// ----------------------------------------------
{ 
    "_id" : "0000009", 
    "name" : "华珍", 
    "age" : 18.0, 
    "skill" : "弓箭", 
    "address" : "草原"
}
  • $in
db.test0001.find({age:{$in: [18, 20]}})
{ 
    "_id" : "0000006", 
    "name" : "郭靖", 
    "age" : 20.0, 
    "skill" : "降龙十八掌", 
    "address" : "中原"
}
// ----------------------------------------------
{ 
    "_id" : "0000007", 
    "name" : "黄蓉", 
    "age" : 18.0, 
    "skill" : "打狗棒", 
    "address" : "桃花岛"
}
// ----------------------------------------------
{ 
    "_id" : "0000008", 
    "name" : "杨康", 
    "age" : 20.0, 
    "skill" : "九阴白骨爪", 
    "address" : "金国"
}
// ----------------------------------------------
{ 
    "_id" : "0000009", 
    "name" : "华珍", 
    "age" : 18.0, 
    "skill" : "弓箭", 
    "address" : "草原"
}
  • 不在 $nin
{ 
    "_id" : "0000001", 
    "name" : "洪七公", 
    "age" : 40.0, 
    "skill" : "降龙十八掌", 
    "address" : "中原"
}
// ----------------------------------------------
{ 
    "_id" : "0000002", 
    "name" : "段志兴", 
    "age" : 40.0, 
    "skill" : "一阳指", 
    "address" : "大理"
}
// ----------------------------------------------
{ 
    "_id" : "0000003", 
    "name" : "黄药师", 
    "age" : 40.0, 
    "skill" : "碧海潮生曲", 
    "address" : "桃花岛"
}
// ----------------------------------------------
{ 
    "_id" : "0000004", 
    "name" : "欧阳锋", 
    "age" : 40.0, 
    "skill" : "蛤蟆功", 
    "address" : "西域"
}
// ----------------------------------------------
{ 
    "_id" : "0000005", 
    "name" : "周伯通", 
    "age" : 38.0, 
    "skill" : "左右互搏术", 
    "address" : "中原"
}

db.test0001.find({age:{$in: [18, 20]}, skill: "降龙十八掌"})
{ 
    "_id" : "0000006", 
    "name" : "郭靖", 
    "age" : 20.0, 
    "skill" : "降龙十八掌", 
    "address" : "中原"
}
  • $or
db.test0001.find({$or: [{age:{$in: [18, 20]}}, {skill: "降龙十八掌"}]})
{ 
    "_id" : "0000001", 
    "name" : "洪七公", 
    "age" : 40.0, 
    "skill" : "降龙十八掌", 
    "address" : "中原"
}
// ----------------------------------------------
{ 
    "_id" : "0000006", 
    "name" : "郭靖", 
    "age" : 20.0, 
    "skill" : "降龙十八掌", 
    "address" : "中原"
}
// ----------------------------------------------
{ 
    "_id" : "0000007", 
    "name" : "黄蓉", 
    "age" : 18.0, 
    "skill" : "打狗棒", 
    "address" : "桃花岛"
}
// ----------------------------------------------
{ 
    "_id" : "0000008", 
    "name" : "杨康", 
    "age" : 20.0, 
    "skill" : "九阴白骨爪", 
    "address" : "金国"
}
// ----------------------------------------------
{ 
    "_id" : "0000009", 
    "name" : "华珍", 
    "age" : 18.0, 
    "skill" : "弓箭", 
    "address" : "草原"
}
  • 正则表达式查询
db.test0001.find({name:{$regex:'^黄'}})
{ 
    "_id" : "0000003", 
    "name" : "黄药师", 
    "age" : 40.0, 
    "skill" : "碧海潮生曲", 
    "address" : "桃花岛"
}
// ----------------------------------------------
{ 
    "_id" : "0000007", 
    "name" : "黄蓉", 
    "age" : 18.0, 
    "skill" : "打狗棒", 
    "address" : "桃花岛"
}
  • 求和
db.test0001.find({skill: "降龙十八掌"}).count()
db.test0001.count()
  • 投影
    在查询到的返回结果中, 只选择必要的字段
    db.集合名称.find({},{字段名称:1,…})
    普通参数为字段,值为1表示显示,不写表示不显示不能设置为0,,设置为0会报错\color{red}{普通参数为字段,值为1表示显示,不写表示不显示不能设置为0,,设置为0会报错}10,,0
    特殊:对于id列默认是显示的,如果不显示需要明确设置为0\color{red}{特殊:对于_id列默认是显示的,如果不显示需要明确设置为0 }id0

db.stu.find({},{_id:0,name:1,gender:1})

  • 自定义查询
    使⽤$where后⾯写⼀个函数, 返回满⾜条件的数据
    查询年龄⼤于30的人物
db.test0001.find({
    $where:function() {
        return this.age>30;}
})

{ 
    "_id" : "0000001", 
    "name" : "洪七公", 
    "age" : 40.0, 
    "skill" : "降龙十八掌", 
    "address" : "中原"
}
// ----------------------------------------------
{ 
    "_id" : "0000002", 
    "name" : "段志兴", 
    "age" : 40.0, 
    "skill" : "一阳指", 
    "address" : "大理"
}
// ----------------------------------------------
{ 
    "_id" : "0000003", 
    "name" : "黄药师", 
    "age" : 40.0, 
    "skill" : "碧海潮生曲", 
    "address" : "桃花岛"
}
// ----------------------------------------------
{ 
    "_id" : "0000004", 
    "name" : "欧阳锋", 
    "age" : 40.0, 
    "skill" : "蛤蟆功", 
    "address" : "西域"
}
// ----------------------------------------------
{ 
    "_id" : "0000005", 
    "name" : "周伯通", 
    "age" : 38.0, 
    "skill" : "左右互搏术", 
    "address" : "中原"
}

排序和去重

  • 排序
    db.集合名称.find().sort({字段:1,…})
    参数1为升序排列
    参数-1为降序排列
db.test0001.find({address: "中原"}).sort({"age": -1})
{ 
    "_id" : "0000001", 
    "name" : "洪七公", 
    "age" : 40.0, 
    "skill" : "降龙十八掌", 
    "address" : "中原"
}
// ----------------------------------------------
{ 
    "_id" : "0000005", 
    "name" : "周伯通", 
    "age" : 38.0, 
    "skill" : "左右互搏术", 
    "address" : "中原"
}
// ----------------------------------------------
{ 
    "_id" : "0000006", 
    "name" : "郭靖", 
    "age" : 20.0, 
    "skill" : "降龙十八掌", 
    "address" : "中原"
}
  • 去重
db.test0001.distinct("skill")
[
    "降龙十八掌", 
    "一阳指", 
    "碧海潮生曲", 
    "蛤蟆功", 
    "左右互搏术", 
    "打狗棒", 
    "九阴白骨爪", 
    "弓箭"
]

limit和skip

⽅法limit(): ⽤于读取指定数量的⽂档
db.集合名称.find().limit(NUMBER)
查询2条学⽣信息

db.test0001.find().limit(2)

⽅法skip(): ⽤于跳过指定数量的⽂档
db.集合名称.find().skip(NUMBER)

db.test0001.find().skip(5)

同时使用

db.test0001.find().limit(2).skip(5)

db.test0001.find().skip(5).limit(2)

聚合 aggregate

聚合(aggregate)是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果。
db.集合名称.aggregate({管道:{表达式}})

db.test0001.aggregate({$group: {_id: "$address", count: {$sum: 1}}})

聚合函数$group后面聚合后的列明必须为_id$sum后的1表示对聚合后的结果进行求和,如果为2,则将求和后的结果乘以2

{ 
    "_id" : "金国", 
    "count" : 1.0
}
// ----------------------------------------------
{ 
    "_id" : "中原", 
    "count" : 3.0
}
// ----------------------------------------------
{ 
    "_id" : "桃花岛", 
    "count" : 2.0
}
// ----------------------------------------------
{ 
    "_id" : "草原", 
    "count" : 1.0
}
// ----------------------------------------------
{ 
    "_id" : "大理", 
    "count" : 1.0
}
// ----------------------------------------------
{ 
    "_id" : "西域", 
    "count" : 1.0
}
  • 常用的管道
    在mongodb中,⽂档处理完毕后, 通过管道进⾏下⼀次处理
    常用管道如下:
    $group: 将集合中的⽂档分组, 可⽤于统计结果
    $match: 过滤数据, 只输出符合条件的⽂档
    $project: 修改输⼊⽂档的结构, 如重命名、 增加、 删除字段、 创建计算结果
    $sort: 将输⼊⽂档排序后输出
    $limit: 限制聚合管道返回的⽂档数
    $skip: 跳过指定数量的⽂档, 并返回余下的⽂档
    $unwind: 将数组类型的字段进⾏拆分
  • 表达式
    处理输⼊⽂档并输出
    语法:表达式:’$列名
    常⽤表达式:
    $sum: 计算总和, $sum:1 表示以⼀倍计数
    $avg: 计算平均值
    $min: 获取最⼩值
    $max: 获取最⼤值
    $push: 在结果⽂档中插⼊值到⼀个数组中
    $first: 根据资源⽂档的排序获取第⼀个⽂档数据
    $last: 根据资源⽂档的排序获取最后⼀个⽂档数据

$group

db.test0001.aggregate({$group: {_id: "$address", count: {$sum: 1}}})

db.test0001.aggregate({$group: {_id: "$address", count: {$sum: 1}, avrage_age: {$avg: "$age"}}})

$match
$match相当于find,聚合函数里面不能用find只能用$match

db.test0001.aggregate({$match: {age: {$gt: 20}}},{ $group: { _id: "$address", count: { $sum: 1 }, avrage_age: { $avg: "$age" } } })

{ 
    "_id" : "西域", 
    "count" : 1.0, 
    "avrage_age" : 40.0
}
// ----------------------------------------------
{ 
    "_id" : "桃花岛", 
    "count" : 1.0, 
    "avrage_age" : 40.0
}
// ----------------------------------------------
{ 
    "_id" : "大理", 
    "count" : 1.0, 
    "avrage_age" : 40.0
}
// ----------------------------------------------
{ 
    "_id" : "中原", 
    "count" : 2.0, 
    "avrage_age" : 39.0
}

$project
$project用于修改文档输出结构,如增加,修改,删除字段,创建计算结果等

db.test0001.aggregate({$group: {_id: "$age", count:{$sum: 1}}}, {$project: {_id: 0, count: 1}})
{ 
    "count" : 2.0
}
// ----------------------------------------------
{ 
    "count" : 2.0
}
// ----------------------------------------------
{ 
    "count" : 1.0
}
// ----------------------------------------------
{ 
    "count" : 4.0
}

db.test0001.aggregate({$group: {_id: "$age", count:{$sum: 1}}}, {$project: {_id: 0, totle: "$count"}})
{ 
    "totle" : 2.0
}
// ----------------------------------------------
{ 
    "totle" : 2.0
}
// ----------------------------------------------
{ 
    "totle" : 1.0
}
// ----------------------------------------------
{ 
    "totle" : 4.0
}

$sort

db.test0001.aggregate({$group: {_id: "$age", count:{$sum: 1}}}, {$project: {_id: 0, age: "$_id", count:1}},{$sort: {_id: 1}})
{ 
    "count" : 2.0, 
    "age" : 18.0
}
// ----------------------------------------------
{ 
    "count" : 2.0, 
    "age" : 20.0
}
// ----------------------------------------------
{ 
    "count" : 1.0, 
    "age" : 38.0
}
// ----------------------------------------------
{ 
    "count" : 4.0, 
    "age" : 40.0
}

$limit$skip

db.test0001.aggregate({$group: {_id: "$age", count:{$sum: 1}}}, {$project: {_id: 0, age: "$_id", count:1}},{$sort: {_id: 1}}, {$skip: 1}, {$limit: 2})
{ 
    "count" : 2.0, 
    "age" : 20.0
}
// ----------------------------------------------
{ 
    "count" : 1.0, 
    "age" : 38.0
}

$unwind
将⽂档中的某⼀个数组类型字段拆分成多条, 每条包含数组中的⼀个值
语法:db.集合名称.aggregate({$unwind:'$字段名称'})
修改数据

db.test0001.update({"_id": "0000001"}, {$set: {hobby: ["叫花鸡", "睡觉", "龙凤汤"]}}) 
db.test0001.update({"_id": "0000002"}, {$set: {hobby: ["敲木鱼", "念经"]}}) 
db.test0001.update({"_id": "0000003"}, {$set: {hobby: ["下棋", "吹箫", "画画"]}})
db.test0001.update({"_id": "0000004"}, {$set: {hobby: ["养蛇", "练毒"]}}) 
db.test0001.update({"_id": "0000005"}, {$set: {hobby: ["玩"]}})
db.test0001.update({"_id": "0000006"}, {$set: {hobby: null}}) 
db.test0001.update({"_id": "0000007"}, {$set: {hobby: ["做菜", "靖哥哥"]}})
用$unwind拆分数组中的字段
db.test0001.aggregate({$unwind: '$hobby'})
结果
{ 
    "_id" : "0000001", 
    "name" : "洪七公", 
    "age" : 40.0, 
    "skill" : "降龙十八掌", 
    "address" : "中原", 
    "hobby" : "叫花鸡"
}
// ----------------------------------------------
{ 
    "_id" : "0000001", 
    "name" : "洪七公", 
    "age" : 40.0, 
    "skill" : "降龙十八掌", 
    "address" : "中原", 
    "hobby" : "睡觉"
}
// ----------------------------------------------
{ 
    "_id" : "0000001", 
    "name" : "洪七公", 
    "age" : 40.0, 
    "skill" : "降龙十八掌", 
    "address" : "中原", 
    "hobby" : "龙凤汤"
}
// ----------------------------------------------
{ 
    "_id" : "0000002", 
    "name" : "段志兴", 
    "age" : 40.0, 
    "skill" : "一阳指", 
    "address" : "大理", 
    "hobby" : "敲木鱼"
}
// ----------------------------------------------
{ 
    "_id" : "0000002", 
    "name" : "段志兴", 
    "age" : 40.0, 
    "skill" : "一阳指", 
    "address" : "大理", 
    "hobby" : "念经"
}
// ----------------------------------------------
{ 
    "_id" : "0000003", 
    "name" : "黄药师", 
    "age" : 40.0, 
    "skill" : "碧海潮生曲", 
    "address" : "桃花岛", 
    "hobby" : "下棋"
}
// ----------------------------------------------
{ 
    "_id" : "0000003", 
    "name" : "黄药师", 
    "age" : 40.0, 
    "skill" : "碧海潮生曲", 
    "address" : "桃花岛", 
    "hobby" : "吹箫"
}
// ----------------------------------------------
{ 
    "_id" : "0000003", 
    "name" : "黄药师", 
    "age" : 40.0, 
    "skill" : "碧海潮生曲", 
    "address" : "桃花岛", 
    "hobby" : "画画"
}
// ----------------------------------------------
{ 
    "_id" : "0000004", 
    "name" : "欧阳锋", 
    "age" : 40.0, 
    "skill" : "蛤蟆功", 
    "address" : "西域", 
    "hobby" : "养蛇"
}
// ----------------------------------------------
{ 
    "_id" : "0000004", 
    "name" : "欧阳锋", 
    "age" : 40.0, 
    "skill" : "蛤蟆功", 
    "address" : "西域", 
    "hobby" : "练毒"
}
// ----------------------------------------------
{ 
    "_id" : "0000005", 
    "name" : "周伯通", 
    "age" : 38.0, 
    "skill" : "左右互搏术", 
    "address" : "中原", 
    "hobby" : "玩"
}
// ----------------------------------------------
{ 
    "_id" : "0000007", 
    "name" : "黄蓉", 
    "age" : 18.0, 
    "skill" : "打狗棒", 
    "address" : "桃花岛", 
    "hobby" : "做菜"
}
// ----------------------------------------------
{ 
    "_id" : "0000007", 
    "name" : "黄蓉", 
    "age" : 18.0, 
    "skill" : "打狗棒", 
    "address" : "桃花岛", 
    "hobby" : "靖哥哥"
}

在这里插入图片描述
属性preserveNullAndEmptyArrays值为false表示丢弃属性值为空的⽂档
属性preserveNullAndEmptyArrays值为true表示保留属性值为空的⽂档
用法:

db.test0001.aggregate({$unwind: {path: "$hobby", preserveNullAndEmptyArrays: true}})

在这里插入图片描述

  • 建立索引:
    语法:db.集合.ensureIndex({属性:1}),1表示升序, -1表示降序
    db.test0001.ensureIndex({name:-1})
    在默认情况下创建的索引均不是唯一索引。
  • 创建唯一索引:
    db.test0001.ensureIndex({"name":1},{"unique":true})
    创建唯一索引并消除重复:
    db.test0001.ensureIndex({"name":1},{"unique":true,"dropDups":true})
  • 建立联合索引(什么时候需要联合索引):
    db.test0001.ensureIndex({name:1,age:1})
  • 查看当前集合的所有索引:
    db.test0001.getIndexes()
  • 删除索引:
    db.test0001.dropIndex('索引名称')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值