zoukankan      html  css  js  c++  java
  • 【MongoDB】基本命令

    1.插入文档:insert

    语法:db.collection_name.insert({<key1>:<value1>,<key2>:<value2>...})

    1.1 插入一条文档

    > use fruitsdb # 数据库存在则连接,不存在,则新建;
    switched to db fruitsdb
    > db.fruitsInfo.insert({"name":"apple",price:10}) // 插入
    WriteResult({ "nInserted" : 1 }) 
    > db.fruitsInfo.find() // 查询集合信息
    { "_id" : ObjectId("5e45649f34694e662cebe073"), "name" : "apple", "price" : 10 }
    > 
    
    

    (1) 此处的db为数据库名,如果在程序中往数据库插入值的话,则应该写成:fruitsdb.fruitsInfo.insert({"name":"apple",price:10})
    (2) insert命令,会自动产生一个ID
    (3) insert命令可以使用save命令代替。若使用save命令指定_id值,则会更新默认的_id值

    > db.fruitsInfo.save({_id:9999,"name":"orange",price:8})
    WriteResult({ "nMatched" : 0, "nUpserted" : 1, "nModified" : 0, "_id" : 9999 })
    
    > db.fruitsInfo.find()
    { "_id" : 9999, "name" : "orange", "price" : 8 } // _id已经被自定义
    

    1.2 插入多条文档(无序)

    db.fruitsInfo.insert(
    	[
    		{
    			"name":"watermelon",price:3
    		},
    		{
    			"name":"strawberry",price:20
    		},
    		{
    			"name":"peach",price:8
    		}
    	]
    )
    

    注意:使用insert命令一次性插入多条文档会比一条一条的插入省时,效率较高。

    1.3 插入多条文档(有序)

    此处的有序是从上往下顺序执行的意思

    db.fruitsInfo.insert(
    	[
    		{
    			_id:1,"name":"watermelon",price:3
    		},
    		{
    			_id:2,"name":"strawberry",price:20
    		},
    		{
    			_id:3,"name":"peach",price:8
    		}
    	],
    	{ordered:true} // true表示出错,则命令执行失败。false表示,如果其中有一条记录出错,则除了出错记录外,其他记录继续插入
    )
    

    1.4 特殊的插入:insertOne与insertMany

    -- 此语句插入会报错
    db.goodsInfo.insertOne(
    	[
            {_id:120,"name":"三国演义",price:89},
            {_id:121,"name":"红楼梦",price:89} 
        ]
    )
    
    ---支持多条插入
    db.goodsInfo.insertMany(
    	[
            {_id:114,"name":"三国演义",price:89},
            {_id:115,"name":"红楼梦",price:89} 
        ]
    )
    

    insertOne可以确保只插入一条文档,不允许做多文档操作。insertMany则反之。

    2.查询文档:find

    语法:db.collection_name.find()

    2.1 简单查询:db.collection_name.find()

    db.collection_name.find() # collection_name为集合名字
    

    2.2 条件查询

    # 单条件查询
    db.goodsInfo.find(
    	{"name":"三国演义"} // 此为查询条件
    )
    
    # 查询需要的字段
    db.goodsInfo.find(
    	{"name":"三国演义"} ,
            {_id:0} //此处的0或者false表示不显示字段,1或者true表示显示字段
    )
    

    2.3 查询null或不存在的字段

    // 插入
    db.studentInfo.insert(
    	[
            {
                _id:110,name:"Jack"
            },
            {
                _id:111,name:"Lucy"
            },
            {
                _id:112,name:null
            },
          	{
                _id:113
            }
        ]
    )
    // 查询
    db.studentInfo.find(
    	{
            name:null
        }
    )
    //------------输出结果------------
    { "_id" : 112, "name" : null }
    { "_id" : 113 }
    
    
    // 查找的值不存在
    db.studentInfo.find(
    	{
            name:{$exists:false}
        }
    )
    //------------输出结果------------
    { "_id" : 113 }
    

    2.4 limit与skip方法

    db.studentInfo.find().limit(2) // 返回前2行记录
    db.studentInfo.find().skip(2) // 跳过前2行,从第3行开始显示
    
    

    2.5 $in运算符的查询

    db.studentInfo.find(
    	{
            _id:{
                $in:[110,111]   // 查找_id等于110与111的文档
            }
        }
    )
    

    2.6 find()查询条件操作符及实例

    操作符 格式 实例 与TRDB的对比
    小于 {:{$lt:}} db.studentInfo.find({age:{$lt:19}}) where age<19
    小于等于 {:{$lte:}} db.studentInfo.find({age:{$lte:19}}) where age<=19
    大于 {:{$gt:}} db.studentInfo.find({age:{$gt:19}}) where age>19
    大于等于 {:{$gte:}} db.studentInfo.find({age:{$gte:19}}) where age>=19
    不等于 {:{$ne:}} db.studentInfo.find({age:{$ne:19}}) where age!=19
    and {:,:...} db.studentInfo.find({age:18,name:"Jack"}) where age=18 and age='Jack'
    or {$or:[{:},{:},...]} db.studentInfo.find({$or:[{_id:110},{_id:111}]})
    模糊匹配:匹配尾部 {:{$regex:/$/}} db.studentInfo.find({name:{$regex:/ck$/}}) where name like '%ck'
    模糊匹配:匹配头部 {:{$regex:/^/}} db.studentInfo.find({name:{$regex:/^Ja/}}) where name like 'Ja%'
    模糊匹配:匹配任意部分 {:{$regex://}} db.studentInfo.find({name:{$regex:/Ja/}}) where name like '%Ja%'

    2.7 区间查询

    // 查询年龄大于17小于19岁的文档
    db.studentInfo.find(
        {
            age:{$gt:17,$lt:19}
        }
    )
    

    3.更新文档:update

    语法:db.collection_name.update()

    3.1 简单修改:$set

    // 插入测试文档
    db.bookInfo.insert(
    	{
            title:"武侠小说",
            total:23,
            detail:[
            {name:"神雕侠侣",score:9.2,hitCount:888888},
            {name:"笑傲江湖",score:8.8,hitCount:999999},
    		{name:"碧血剑",score:8.9,hitCount:1111111}
            ]
        }
    )
    // 更新title
    db.bookInfo.update(
    	{
            title:"武侠小说"
        },
        {
        	$set:{title:"好看的武侠小说"}
        }
    )
    

    3.2 更新数值(加法):$inc

    使用$inc更新数值,做的是加法运算。以下更新语句,更新后total的值为46

    db.bookInfo.update(
    	{
            title:"好看的武侠小说"
        },
        {
        	$inc:{total:23}
        }
    )
    

    3.3 更新数值(乘法):$mul

    使用$mul更新数值,做的是乘法运算。以下更新语句,更新后total的值为92

    db.bookInfo.update(
    	{
            title:"好看的武侠小说"
        },
        {
        	$mul:{total:2}
        }
    )
    

    3.4 修改字段名:$rename

    // 修改字段名,将total修改为sum
    db.bookInfo.update(
    	{
            title:"好看的武侠小说"
        },
        {
        	$rename:{"total":"sum"}
        }
    )
    

    3.5 根据最小值更新:$min

    将$min给出的值与当前文档字段值进行比较,当给定值较小时,则修改当前文档值为给定值

    db.bookInfo.update(
    	{
            title:"好看的武侠小说"
        },
        {
        	$min:{total:2}
        }
    )
    

    3.6 根据最小值更新:$max

    将$max给出的值与当前文档字段值进行比较,当给定值较大时,则修改当前文档值为给定值

    db.bookInfo.update(
    	{
            title:"好看的武侠小说"
        },
        {
        	$max:{total:12}
        }
    )
    

    3.7 删除字段:$unset

    
    // 删除字段,删除sum字段
    db.bookInfo.update(
    	{
            title:"好看的武侠小说"
        },
        {
        	$unset:{sum:92}
        }
    )
    

    3.8 修改一条文档里的数组和嵌套文档

    // 插入文档数据
    db.bookInfo.insert(
    	{
            _id:100,
            title:"书单1",
            amount:120,
            unit:"RMB",
            detail:[
                {name:"西游记",price:98},
                {name:"三国演义",price:120}
            ],
            overview:{shopName:"当当网",shopNum:37}
        }
    )
    // 更新数据
    db.bookInfo.update(
    	{
            _id:100
        },
        {
            $set:{
                "detail.0":{name:"红楼梦",price:130}, // 更新detail数组的第一个元素
                "overview.shopName":"京东商城" // 更新嵌套文档
            }
            
        }
    )
    

    注意:引用嵌套文档对象或数组的时候,需要加""号,如:"detail.0","overview.shopName"

    3.8 多文档修改:multi

    // 插入多文档
    db.custInfo.insert(
        [
            {name:"张三",age:18,address:"China"},
            {name:"李四",age:19,address:"China"},
            {name:"王五",age:17,address:"China"},
            {name:"Jack",age:16,address:"America"},
            {name:"Tom",age:12,address:"America"}
        ]
    )
    // 更新address为China的记录,将值修改为:云南
    
    // 不添加参数multi,只会更新一条文档
    db.custInfo.update(
            {address:"China"},{$set:{address:"云南"}}
    )
    // 添加参数multi,更新多条文档
    db.custInfo.update(
            {address:"China"},{$set:{address:"云南"}},{multi:true}
    )
    

    3.9 简化修改命令:updateOne(),updateMany(),replaceOne()

    updateOne():修改一条文档,与update()的区别是少了multi: 选项
    updateMany():修改多条文档,与update()的区别是少了multi: 选项
    replaceOne():与update()的区别是有2处,一是没有multi: 选项,二是在第二个参数没有更新操作

    // replaceOne 操作案例(谨慎使用)
    db.custInfo.replaceOne(
        {
            name:"李四"
        },
        {
            age:56
        }
    )
    

    注意:使用replaceOne对文档进行操作的时候,如果类似上述操作,则会直接将原有文档除_id外的字段全部替换给定字段,具体案例如下图:

    4.删除文档:remove

    4.1 删除文档中所有记录:db.collection_name.remove()

    // 插入数据
    db.custInfo.insertMany(
    	[
            {name:"Jack",age:18},
            {name:"Marry",age:19}
        ]
    )
    // 删除
    db.custInfo.remove({})
    

    若要删除整个集合,可以使用db.custInfo.drop()删除,此方法效率更高,并且会把整个集合和索引一起删除。

    4.2 删除符合条件的记录

    // 插入数据
    db.custInfo.insertMany(
    	[
            {name:"Jack",age:18},
            {name:"Marry",age:19}
        ]
    )
    // 删除
    db.custInfo.remove({age:{$gt:18}})
    

    如果需要删除满足条件的单条记录,则添加justOne选项,案例如下:

    // 插入数据
    db.custInfo.insertMany(
    	[
            {name:"Jack",age:18},
            {name:"Marry",age:19},
            {name:"Marry",age:20}
        ]
    )
    // 删除
    db.custInfo.remove(
        {age:{$gt:18}},
        {justOne:true}
    )
    
  • 相关阅读:
    final有什么用?
    数组的定义
    作业
    List 、Set数据结构
    报表工具实现单据套打
    动态格报表的制作
    图形钻取
    报表工具轻松搞定卡片式报表
    列表钻取
    报表中如何实现不规则布局
  • 原文地址:https://www.cnblogs.com/OliverQin/p/12305885.html
Copyright © 2011-2022 走看看