[MongoDB] Query, update, index and group

本文深入探讨了数据库操作的关键概念,包括查询操作如使用$in、$where等运算符进行条件筛选,以及更新操作如修改文档属性和批量更新。同时,文章强调了性能优化和索引构建的重要性,通过创建索引来提升查询效率。此外,还介绍了聚合操作在汇总数据方面的应用,以及如何利用$group进行复杂的数据分组和计算。

/*
    1. Query Operators
*/
db.posts.find({
    viewsCount: {$get: 1000, $lte: 3000}
}, {_id: 0, viewsCount: 1, title: 1})

// $in
db.posts.find({
    categories: {$in: ['ios']}
}, {categories: 1})

//$where
db.posts.find({
    $where: function(){
        return this.categories.length>15
    }
}, {categories: 1, title: 1})

//see how many categories from previous query:
db.posts.find({
    $where: function(){
        return this.categories.length>15
    }
}, {categories: 1, title: 1})[0].categories.length

 

 

Update:

/*
    2. Update
*/
var d = db.posts.findOne();
//change the author email:
d.author.email = "new@new.com"
//update the database
db.post.update({_id: d._id}, d);


//update mutli-document
db.posts.update({viewsCount: {$gt: 3000}}, {$set: {newKey: true}}, {multi:true}) //add new key, set mutli

 

Performance and indexes:

/*
    3. Performance and indexes
*/
//create the data
db.numbers.drop();
var num = 5000000,
i = 0;
 for(i = 0; i < num; i ++){
    var randomNumber = Math.floor(Math.random()*10000);
    db.numbers.insert({number:randomNumber});
    //print(i);
 }

db.number.find({number: {$gt: 1000, $lt: 3000}, {_id: 0, number: 1}}).explain(); //it scan all the doucment, took 3500ms
 
//add index:
db.numbers.ensureIndex({number: 1});
//took 1046 ms, scan 1m instead of 5m 

 

Group:

/*
    4. $group
*/

//sum up the viewCount, rename the result as 'totalViewsCount'
db.posts.aggregate({
    $group: {
        _id:null,
        totalViewsCount: {$sum: '$viewsCount'}
    }
})

//adding 1 for each document
db.posts.aggregate({
    $group: {
        _id:null,
        totalNumberOfDocuments: {$sum: 1}
    }
})

// =
db.posts.count()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值