MongoDB脚本

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(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)


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(
   <document>,
   {
     writeConcern: <document>
   }
)

4.删除数据
db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)
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() 方法以格式化的方式来显示所有文档。

等于            {<key>:<value>}            db.col.find({"by":"菜鸟教程"}).pretty()        where by = '菜鸟教程'
小于            {<key>:{$lt:<value>}}    db.col.find({"likes":{$lt:50}}).pretty()    where likes < 50
小于或等于        {<key>:{$lte:<value>}}    db.col.find({"likes":{$lte:50}}).pretty()    where likes <= 50
大于            {<key>:{$gt:<value>}}    db.col.find({"likes":{$gt:50}}).pretty()    where likes > 50
大于或等于        {<key>:{$gte:<value>}}    db.col.find({"likes":{$gte:50}}).pretty()    where likes >= 50
不等于            {<key>:{$ne:<value>}}    db.col.find({"likes":{$ne:50}}).pretty()    where likes != 50

多个条件
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的用处不大)

整理自菜鸟教程

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值