MongoDB常用语法

mongodb与sql查询语句对比

MongoDB语法

Mysql语法

释义

db.users.find()

select * from users

 

db.users.find({"age" : 27})

select * from users where age = 27 

 

db.users.find({"username" : "joe", "age" : 27})

select * from users where "username" = "joe" and age = 27  

 

db.users.find({}, {"username" : 1, "email" : 1})

 select username, email from users

 

db.users.find({}, {"username" : 1, "_id" : 0})

 

即时加上了列筛选,_id也会返回;必须显式的阻止_id返回  

db.users.find({"age" : {"$gte" : 18, "$lte" : 30}})

select * from users where age >=18 and age <= 30

 

db.users.find({"username" : {"$ne" : "joe"}})

select * from users where username <> "joe"

 

db.users.find({"ticket_no" : {"$in" : [725, 542, 390]}})

select * from users where ticket_no in (725, 542, 390)  

 

db.users.find({"ticket_no" : {"$nin" : [725, 542, 390]}})

 select * from users where ticket_no not in (725, 542, 390)  

 

db.users.find({"$or" : [{"ticket_no" : 725}, {"winner" : true}]})

select * form users where ticket_no = 725 or winner = true

 

db.users.find({"id_num" : {"$mod" : [5, 1]}})

select * from users where (id_num mod 5) = 1  

 

db.users.find({"$not": {"age" : 27}})

select * from users where not (age = 27)  

 

db.users.find({"username" : {"$in" : [null], "$exists" : true}})

select * from users where username is null

如果直接通过find({"username" : null})进行查询,那么连带"没有username"的纪录一并筛选出来 

db.users.find({"name" : /joey?/i})

 

正则查询,value是符合PCRE的表达式 

db.food.find({fruit : {$all : ["apple", "banana"]}})

 

 对数组的查询, 字段fruit中,既包含"apple",又包含"banana"的纪录  

db.food.find({"fruit.2" : "peach"})

 

对数组的查询, 字段fruit中,第3个(从0开始)元素是peach的纪录  

db.food.find({"fruit" : {"$size" : 3}})

 

对数组的查询, 查询数组元素个数是3的记录,$size前面无法和其他的操作符复合使用  

db.users.findOne(criteria, {"comments" : {"$slice" : 10}})

 

对数组的查询,只返回数组comments中的前十条,还可以{"$slice" : -10}, {"$slice" : [23, 10]}; 分别返回最后10条,和中间10条  

db.people.find({"name.first" : "Joe", "name.last" : "Schmoe"})

 

嵌套查询  

db.blog.find({"comments" : {"$elemMatch" : {"author" : "joe", "score" : {"$gte" : 5}}}})

 

嵌套查询,仅当嵌套的元素是数组时使用

db.foo.find({"$where" : "this.x + this.y == 10"})

 

 复杂的查询,$where当然是非常方便的,但效率低下。对于复杂查询,考虑的顺序应当是 正则 -> MapReduce -> $where  

db.foo.find({"$where" : "function() { return this.x + this.y == 10; }"})

 

$where可以支持javascript函数作为查询条件

db.foo.find().sort({"x" : 1}).limit(1).skip(10);

 

返回第(10, 11]条,按"x"进行排序; 三个limit的顺序是任意的,应该尽量避免skip中使用large-number  

db.t_users.aggregate([

    { $group: { _id: { 'difficulty': '$difficulty' },'uniqueIds': {'$addToSet': '$_id'}, count: { $sum: 1 } } },

    { $match: { count: { $gt: 1 } } }

]) 

 

查重复数据

设置定位索引

db.jskj_house.createIndex({"local.gps":"2d"});

设置默认值

db.getCollection("as_wxuser1").find().forEach(

    function(item){  

        db.getCollection('as_wxuser1').update({"_id":item._id},{$set:{

                "idcard":item["idcard"]?item["idcard"]:{"type":"身份证","number":""}

                }})

    }

    );

db.getCollection("as_wxuser1").find().forEach(

    function(item){  

        db.getCollection('as_wxuser1').update({"_id":item._id},{$set:{

                "idcard.number":item["idcard"]["number"]?item["idcard"]["number"]:"",

                "idcard.type":item["idcard"]["type"]?item["idcard"]["type"]:"身份证",

                }})

    }

    );

批量删除数据

db.t_users.remove({'user._id':"5dcf8708e9b27468495c87ec"})

db.t_users.aggregate([

    { "$addFields": { "name": "$object_name" } },

    {

        "$out": "t_users"

    }]) #字段复制

批量修改数据

db.t_users.update({'isdel':true},{$set:{'isdel':false}},{multi:true})

 

数据库、用户操作

show users 显示所有用户

show dbs 显示所有数据库

db.dropUser('admin') 删除数据库用户

db.dropAllUser() 删除所有数据库用户

表操作

db.t_users.drop() 删除表

db.t_users.remove({}) 清空表数据

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值