MongoDB常用查询及库操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

猜你喜欢

转载自blog.csdn.net/jianleking/article/details/73549687