版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jianleking/article/details/73549687
1.常用查询
1.NOT NULL
<=> 查询name
值不为空的所有记录
// 查询条件
{name:{$exists:true}}
// 全语句
db.user.find({name:{$exists:true}}).sort({ "_id": 1}).skip(0).limit(30)
2.OR
<=> 查询name='tom'
及name='jim'
的记录
// 查询条件
{$or:[{name:'tom'},{name:'jim'}]}
// 全语句
db.user.find({$or:[{name:'tom'},{name:'jim'}]}).sort({ "_id": 1}).skip(0).limit(30)
3.AND
<=> 查询name='tom'
并且age=18
的记录
// 查询条件
{$and:[{name:'tom'},{age:18}]}
// 全语句
db.user.find({$and:[{name:'tom'},{age:18}]}).sort({ "_id": 1}).skip(0).limit(30)
或者
// 查询条件
{name:'tom',$and:[{age:18}]}
// 全语句
db.user.find({name:'tom',$and:[{age:18}]}).sort({ "_id": 1}).skip(0).limit(30)
注意,如果有层级的查询,
key
一定要加引号查询friend对象名称不为空的记录
{'friend.name':{$exists:true}}
4.模糊查询
// 查询name为 Tomson Jackson
{name:{$regex:'son'}
db.user.find({name:{$regex:'son'}).sort({ "_id": 1}).skip(0).limit(30)
5.范围、区域查询
- $lt::小于
- $gt:大于[great than]
- $lte:小于等于
- $gte:大于等于[great than equal]
- $ne:不等于[not equal]
- $eq:等于[equal]
// 查询未成年
{age:{$lt:18}}
// 全语句
db.user.find({age:{$lt:18}}).skip(0).limit(30)
!!!注意:如果查询的区域字段是字符串的数字,需加引号。如:
//查询学号大于1010的
{studentNo:{$gt:'1010'}}
6.IN<=>查询年龄为18,20,25的人
{age: {$in: [18,20,25]}}}
全语句
db.user.find({age:{$in:[18,20,25]}})
7.数组对象查询
{
name:'jyjin',
age:'25',
friends:[{
name:'tom',
age:18,
like:['write','red','paint']
},
{
name:'monica',
age:18,
like:['swimming','paint']
},
{
name:'linda',
age:18,
like:['Yoga','cooking']
}]
},
{
name:'Alice',
age:'25',
friends:[{
name:'jyjin',
age:18,
like:['write','red','paint','swimming','paint','cooking']
},
{
name:'Jessy',
age:18,
like:['swimming','basketball']
},
{
name:'linda',
age:18,
like:['Yoga','cooking']
}]
}
查询所有和linda是朋友的人 => 查询数组对象
的普通属性
{'friends.name':'linda'}
//全语句
db.user.find({'friends.name':'linda'})
查询所有喜欢篮球的人 => 查询数组对象
的数组属性
{'friends.like':'basketball'}
//全语句
db.user.find({'friends.like':'basketball'})
2.基本库操作
use helloMongo
创建名为helloMongo的库db.table1.insert({id:1,remark:'test create a mongo table'})
创建了一个名为table1的表,并插入一条数据db.table1.save(obj)
同上为插入db.table1.find({})
查询全部show dbs
查看当前机器所有数据库列表db
查看当前所在库名show tables
查看所有表名db.dropDatabase()
删除当前所在库
aggregate聚合求值(求和、平均值等)
以一个较为复杂的例子,举例:
假设初始化数据为如下数据
db.col.insertMany([
/* 1 */
{
"_id" : ObjectId("5abd9dfbb63758ecb25c9091"),
"title" : "PHP 教程",
"description" : "PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。",
"by" : "菜鸟教程",
"url" : "http://www.runoob.com",
"tags" : [
"php"
],
"likes" : 200.0
}
/* 2 */
{
"_id" : ObjectId("5abdabaeb63758ecb25c9092"),
"title" : "Java 教程",
"description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。",
"by" : "菜鸟教程",
"url" : "http://www.runoob.com",
"tags" : [
"java"
],
"likes" : 150.0
}
/* 3 */
{
"_id" : ObjectId("5abdabb5b63758ecb25c9093"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "菜鸟教程",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb"
],
"likes" : 100.0
}
/* 4 */
{
"_id" : ObjectId("5abdadddb63758ecb25c9094"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "菜鸟教程",
"url" : "http://www.runoob.com",
"tags" : ()=>{alert(1)},
"likes" : 100.0
}
/* 5 */
{
"_id" : ObjectId("5abdcf13b63758ecb25c9095"),
"title" : "MongoDB Overview",
"description" : "MongoDB is no sql database",
"by_user" : "runoob.com",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100.0
}
/* 6 */
{
"_id" : ObjectId("5abdcf13b63758ecb25c9096"),
"title" : "NoSQL Overview",
"description" : "No sql database is very fast",
"by_user" : "runoob.com",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 10.0
}
/* 7 */
{
"_id" : ObjectId("5abdcf13b63758ecb25c9097"),
"title" : "Neo4j Overview",
"description" : "Neo4j is no sql database",
"by_user" : "Neo4j",
"url" : "http://www.neo4j.com",
"tags" : [
"neo4j",
"database",
"NoSQL"
],
"likes" : 750.0
}
])
查询有每个作者写的文章的总赞数(此集合包含非文章内数据,需要通过是否存在作者进行过滤统计)
db.col
.find({by_user:{$exists:true}});// 普通查询有作者的记录
db.col
.aggregate(
[{
$match:{ // 通过管道查法 $match去过滤数据
//likes:{$gt:90.0,$lt:120.0},
by_user:{$exists:true}
}
},{
$group:{ // 通过$group分组
_id:'$by_user',
totalNums:{
// $sum:1,
$sum:'$likes' // 通过$sum求和
}
}
}])
=> mysql:
SELECT
by_user, SUM(likes)
FROM
col
GROUP BY
by_user
WHERE
by_user IS NOT NULL
注释打开
=> mysql:
SELECT
by_user, COUNT(*)
FROM
col
GROUP BY
by_user
WHERE
by_user IS NOT NULL
AND likes > 90
AND likes < 120