mongodb.js

/*db.col.insert({title:'test'})
db.col.find()
var doc=db.col.insertOne({a:1})
doc
var res=db.col.insertMany([{a:1},{b:2}])
res*/
/*db.col.insert({
    title: 'MongoDB 教程', 
    description: 'MongoDB 是一个 Nosql 数据库',
    by: '菜鸟教程',
    url: 'http://www.runoob.com',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100
})
db.col.find()
db.col.update({title:'MongoDB 教程'},{$set:{'title':'MongoDB'}})
db.col.find().pretty()
以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。


db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})
save() 方法通过传入的文档来替换已有文档
db.col.save({
    "_id" : ObjectId("5a39f9e652378f342829b791"),
    "title" : "MongoDB",
    "description" : "MongoDB 是一个 Nosql 数据库",
    "by" : "Runoob",
    "url" : "http://www.runoob.com",
    "tags" : [
            "mongodb",
            "NoSQL"
    ],
    "likes" : 110
})
db.col.find().pretty()*/
/*db.collection.updateOne() 向指定集合更新单个文档
db.collection.updateMany() 向指定集合更新多个文档*/
/*db.col.remove({title:"test"})//过时
如删除集合下全部文档:
db.inventory.deleteMany({})
删除 status 等于 A 的全部文档:
db.inventory.deleteMany({ status : "A" })
删除 status 等于 D 的一个文档:
db.inventory.deleteOne( { status: "D" } )*/
/*db.col.find().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*/


/*MongoDB AND 条件
MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件。
语法格式如下:
>db.col.find({key1:value1, key2:value2}).pretty()*/
/*MongoDB or
db.col.find({$or:[{title:'1'},{title:'MongoDB'}]})*/
/*db.col.find({likes:{$gte:100},$or:[{title:"1"},{title:"MongoDB"}]})//and 和or*/
/*返回指定的键若不指定 projection,则默认返回所有键,指定 projection 格式如下,有两种模式
db.collection.find(query, {title: 1, by: 1}) // inclusion模式 指定返回的键,不返回其他键
db.collection.find(query, {title: 0, by: 0}) // exclusion模式 指定不返回的键,返回其他键*/
/*_id 键默认返回,需要主动指定 _id:0 才会隐藏
两种模式不可混用(因为这样的话无法推断其他键是否应返回)
db.collection.find(query, {title: 1, by: 0}) // 错误
只能全1或全0,除了在inclusion模式时可以指定_id为0
db.collection.find(query, {_id:0, title: 1, by: 1}) // 正确*/
/*$gt -------- greater than  >


$gte --------- gt equal  >=


$lt -------- less than  <


$lte --------- lt equal  <=


$ne ----------- not equal  !=


$eq  --------  equal  =*/


/*
$type
Double 1  
String 2  
Object 3  
Array 4  
Binary data 5  
Undefined 6 已废弃。
Object id 7  
Boolean 8  
Date 9  
Null 10  
Regular Expression 11  
JavaScript 13  
Symbol 14  
JavaScript (with scope) 15  
32-bit integer 16  
Timestamp 17  
64-bit integer 18  
Min key 255 Query with -1.
Max key 127  
*/
/*db.col.find({"title" : {$type : 2}})//title为 String的数据 */


/*db.col.find({},{"title":1,_id:0}).limit(3)//limit数据条数
补充说明skip和limit方法只适合小数据量分页,如果是百万级效率就会非常低,因为skip方法是一条条数据数过去的,建议使用where_limit
在查看了一些资料之后,发现所有的资料都是这样说的:
不要轻易使用Skip来做查询,否则数据量大了就会导致性能急剧下降,这是因为Skip是一条一条的数过来的,多了自然就慢了。
这么说Skip就要避免使用了,那么如何避免呢?首先来回顾SQL分页的后一种时间戳分页方案,这种利用字段的有序性质,利用查询来取数据的方式,可以直接避免掉了大量的数数。也就是说,如果能附带上这样的条件那查询效率就会提高,事实上是这样的么?我们来验证一下:
这里我们假设查询第100001条数据,这条数据的Amount值是:2399927,我们来写两条语句分别如下:
b.test.sort({"amount":1}).skip(100000).limit(10)  //183ms
db.test.find({amount:{$gt:2399927}}).sort({"amount":1}).limit(10)  //53ms
结果已经附带到注释了,很明显后者的性能是前者的三分之一,差距是非常大的。也印证了Skip效率差的理论。*/




/*db.col.find({},{"title":1,_id:0}).sort({"likes":-1})//排序 
*/


/*索引*/
/*db.col.ensureIndex({"title":1})//建索引按title升序
db.col.ensureIndex({"title":1,"description":-1})//建索引按title升序 descriptrion 降序 
db.col.ensureIndex({open: 1, close: 1}, {background: true})*/
/*db.col.getIndexes()//查看索引
db.col.totalIndexSize()//查看集合中的索引大小*/
/*聚合*/
/*db.page.find({})
db.page.aggregate(
    [
        {$group : {
            _id : "$pageTitle" , 
            num : {
                $sum : 1
            }
        }
            
        }
        ]
    )
    */
    
    
//查看不同 pageTile count
/*db.page.aggregate(
    { $project : {
        title : 1 ,
        author : 1 ,
    }}
 );
 
 db.articles.aggregate( [
                        { $match : { score : { $gt : 70, $lte : 90 } } },
                        { $group: { _id: null, count: { $sum: 1 } } }
                       ] );*/
//$match用于获取分数大于70小于或等于90记录,然后将符合条件的记录送到下一阶段$group管道操作符进行处理。
/*$project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
$match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
$limit:用来限制MongoDB聚合管道返回的文档数。
$skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
$unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
$group:将集合中的文档分组,可用于统计结果。
$sort:将输入文档排序后输出。
$geoNear:输出接近某一地理位置的有序文档。*/
//查看12点到2点之间errRank每个类别的数量
/*db.LogInfo.aggregate(
    [


        {
            $match : 
            { 
                "createDate" : 
                {
                    $gt:ISODate("2018-01-04 16:00:00"),$lt:ISODate("2018-01-04 24:00:00")
                    
                } 
                
            } 
                
        },
        {
            $group:
            {
                _id:"$errRank", num:{ $sum : 1 }
                
            }
            
            
        }
    ]
)*/
/*查按日、按月、按年、按周、按小时、按分钟聚合操作如下:
db.getCollection('m_msg_tb').aggregate(
[
    {$match:{m_id:10001,mark_time:{$gt:new Date(2017,8,0)}}},
    {$group: {
       _id: {$dayOfMonth:'$mark_time'},
        pv: {$sum: 1}
        }
    },
    {$sort: {"_id": 1}}
])
时间关键字如下:
 $dayOfYear: 返回该日期是这一年的第几天(全年 366 天)。
 $dayOfMonth: 返回该日期是这一个月的第几天(1到31)。
 $dayOfWeek: 返回的是这个周的星期几(1:星期日,7:星期六)。
 $year: 返回该日期的年份部分。
 $month: 返回该日期的月份部分( 1 到 12)。
 $week: 返回该日期是所在年的第几个星期( 0 到 53)。
 $hour: 返回该日期的小时部分。
 $minute: 返回该日期的分钟部分。
 $second: 返回该日期的秒部分(以0到59之间的数字形式返回日期的第二部分,但可以是60来计算闰秒)。
 $millisecond:返回该日期的毫秒部分( 0 到 999)。
 $dateToString: { $dateToString: { format: , date: } }。*/
 //MongoDB 复制(副本集)mongod --port 27017 --dbpath "/data/db" --replSet rs0
/* for(var i=0;i<150;i++){
    db.getCollection("page").insert([
    {
        "pageTitle": "Java虚拟机运行时数据区域",
        "pageContent":i,
        "imageAddr": i,
        "pageContentAddr":i,
        "insertTime": new Date(),
        "updateTime": new Date()
    }
])
}
db.page.deleteMany({})*/
 var s=db.rtdpRequestInfo.find(
            { 
                "time" : 
                {
                    $gte:ISODate("2018-01-30 16:00:00"),$lte:ISODate("2018-01-31 16:00:00")
                    
                },
                "range":{"$nin":["Avg","Avg Min","Avg Max"]},
                $or:[{server:'XX.X.XXX.XXX'},{server:'XX.X.XXX.XXX'}]
               
                
            } 
                
)
var reduce = function(key, values){


      var count=0;


      values.forEach(function(v) {


         count+=v.transaction;


      });


      return {count: count};


  };
reduce("transaction",s)



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

StrideBin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值