1.插入数据
db.col.insert({
title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: '菜鸟教程',
url: 'http://www.runoob.com',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
insertMany 批量插入
2.更新数据
db.collection.update(
{
upsert:
multi:
writeConcern:
}
)
query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。
3.替换文档
db.collection.save(
{
writeConcern:
}
)
4.删除数据
db.collection.remove(
{
justOne:
writeConcern:
}
)
db.col.remove({}) 删除所有
db.col.remove({'title':'MongoDB 教程'}) 删除部分
query :(可选)删除的文档的条件。
justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
writeConcern :(可选)抛出异常的级别。
5.查询
db.collection.find(query, projection)
query :可选,使用查询操作符指定查询条件
projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
db.col.find().pretty()
pretty() 方法以格式化的方式来显示所有文档。
等于 {
小于 {
小于或等于 {
大于 {
大于或等于 {
不等于 {
多个条件
db.col.find({key1:value1, key2:value2}).pretty()
and和like
db.col.find({"likes": {$gt:50}, $or: [{"by": "123"},{"title": "MongoDB"}]}).pretty()
limit
db.COLLECTION_NAME.find().limit(NUMBER)
skip(NUMBER) 跳过某个数据
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
sort()方法 -1 是用于降序排列
db.COLLECTION_NAME.find().sort({KEY:1})
6.索引:
Key 值为你要创建的索引字段,1 为指定按升序创建索引,创建索引指定为 -1
db.collection.createIndex(keys, options)
Parameter Type Description
background Boolean 建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 "background" 可选参数。 "background" 默认值为false。
unique Boolean 建立的索引是否唯一。指定为true创建唯一索引。默认值为false.
name string 索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。
dropDups Boolean 3.0+版本已废弃。在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false.
sparse Boolean 对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false.
expireAfterSeconds integer 指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。
v index version 索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。
weights document 索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。
default_language string 对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语
language_override string 对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language.
db.col.getIndexes() 查看集合索引
db.col.totalIndexSize() 查看集合索引大小
db.col.dropIndexes() 删除集合所有索引
db.col.dropIndex("索引名称") 删除集合指定索引
MongoDB中聚合的方法使用aggregate()
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}]) 对by_user分组聚合,count()
表达式 描述 实例
$sum 计算总和。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
$avg 计算平均值 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
$min 获取集合中所有文档对应值得最小值。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
$max 获取集合中所有文档对应值得最大值。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
$push 在结果文档中插入值到一个数组中。 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
$addToSet 在结果文档中插入值到一个数组中,但不创建副本。 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
$first 根据资源文档的排序获取第一个文档数据。 db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
$last 根据资源文档的排序获取最后一个文档数据 db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])
$project: 修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
$match: 用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
$limit: 用来限制MongoDB聚合管道返回的文档数。
$skip: 在聚合管道中跳过指定数量的文档,并返回余下的文档。
$unwind: 将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
$group: 将集合中的文档分组,可用于统计结果。
$sort: 将输入文档排序后输出。
$geoNear: 输出接近某一地理位置的有序文档。
db.article.aggregate(
{ $project : {
title : 1 ,
author : 1 ,
}}
);
db.article.aggregate(
{ $project : {
_id : 0 ,
title : 1 ,
author : 1
}});
match用于获取分数大于70小于或等于90记录,然后将符合条件的记录送到下一阶段$group管道操作符进行处理。
db.articles.aggregate( [
{ $match : { score : { $gt : 70, $lte : 90 } } },
{ $group: { _id: null, count: { $sum: 1 } } }
] );
经过$skip管道操作符处理后,前五个文档被"过滤"掉
db.article.aggregate(
{ $skip : 5 });
{ $set : { field : value } } 用来指定一个键并更新键值,若键不存在并创建。
{ $unset : { field : 1} } 用来删除一个键
{ $inc : { field : value } } $inc可以对文档的某个值为数字型(只能为满足要求的数字)的键进行增减的操作。
{ $push : { field : value } } 把value追加到field里面去,field一定要是数组类型才行,如果field不存在,会新增一个数组类型加进去。
{ $pushAll : { field : value_array } } 同$push,只是一次可以追加多个值到一个数组字段内。
{ $pull : { field : _value } } 从数组field内删除一个等于value值
$addToSet 增加一个值到数组内,而且只有当这个值不在数组内才增加。
{ $pop : { field : 1 } } 删除数组的第一个或最后一个元素
{ $rename : { old_field_name : new_field_name } } 修改字段名称
{$bit : { field : {and : 5}}} 位操作,integer类型
//match用于获取分数大于70小于或等于90记录,然后将符合条件的记录送到下一阶段$group管道操作符进行处理。
db.articles.aggregate( [
{ $match : { score : { $gt : 70, $lte : 90 } } },
{ $group: { _id: null, count: { $sum: 1 } } }
] );
索引数组字段:对数据中每个数据都要做索引操作
索引子文档字段:对文档下字段下面的字段做索引 ;
db.users.ensureIndex({"address.city":1,"address.state":1,"address.pincode":1})
索引限制:
索引不能被以下的查询使用:
正则表达式及非操作符,如 $nin, $not, 等。
算术运算符,如 $mod, 等。
$where 子句
索引键限制
从2.6版本开始,如果现有的索引字段的值超过索引键的限制,MongoDB中不会创建索引。
最大范围
集合中索引不能超过64个
索引名的长度不能超过128个字符
一个复合索引最多可以有31个字段
ObjectId 是一个12字节 BSON 类型数据,有以下格式:
前4个字节表示时间戳
接下来的3个字节是机器标识码
紧接的两个字节由进程id组成(PID)
最后三个字节是随机数。
MapReduce 命令
db.collection.mapReduce(
function() {emit(key,value);}, //map 函数
function(key,values) {return reduceFunction}, //reduce 函数
{
out: collection,
query: document,
sort: document,
limit: number
}
)
map :映射函数 (生成键值对序列,作为 reduce 函数参数)。
reduce 统计函数,reduce函数的任务就是将key-values变成key-value,也就是把values数组变成一个单一的值value。。
out 统计结果存放集合 (不指定则使用临时集合,在客户端断开后自动删除)。
query 一个筛选条件,只有满足条件的文档才会调用map函数。(query。limit,sort可以随意组合)
sort 和limit结合的sort排序参数(也是在发往map函数前给文档排序),可以优化分组机制
limit 发往map函数的文档数量的上限(要是没有limit,单独使用sort的用处不大)
整理自菜鸟教程