• MongoDB的ObjectId和基本操作增删改查(3)


    ObjectId

    基本操作增删改查

    增: insert

    介绍: mongodb存储的是文档,. 文档是json格式的对象.

    语法: db.collectionName.insert(document);

    1: 增加单篇文档

    db.collectionName.insert({title:’nice day’});

    db.person.insert({“name”:”yxl”,”age”:26})

    2: 增加单个文档,并指定_id

    db.collectionName.insert({_id:8,age:78,name:’lisi’});

    3. 增加多个文档

    db.collectionName.insert(

    [

    {time:'friday',study:'mongodb'},

    {_id:9,gender:'male',name:'QQ'}

    ]

    )

    删:remove

    语法: db.collection.remove(查询表达式, 选项);

    选项是指  {justOne:true/false},是否只删一行, 默认为false

    注意

    1: 查询表达式依然是个json对象

    2: 查询表达式匹配的行,将被删掉.

    3: 如果不写查询表达式,collections中的所有文档将被删掉.

    例1: db.stu.remove({sn:’001’});

    删除stu表中 sn属性值为’001’的文档

    例2: db.stu.remove({gender:’m’,true});

    删除stu表中gender属性为m的文档,只删除1行.

    改  update操作

    改谁? --- 查询表达式

    改成什么样? -- 新值 或 赋值表达式

    操作选项 ----- 可选参数

    语法: db.collection.update(查询表达式,新值,选项);

    例:

    db.news.update({name:'QQ'},{name:'MSN'});

    是指选中news表中,name值为QQ的文档,并把其文档值改为{name:’MSN’},

    结果: 文档中的其他列也不见了,改后只有_id和name列了.

    即--新文档直接替换了旧文档,而不是修改

    如果是想修改文档的某列,可以用$set关键字

    db.collectionName.update(query,{$set:{name:’QQ’}})

    修改时的赋值表达式

    $set  修改某列的值

    $unset 删除某个列

    $rename 重命名某个列

    $inc 增长某个列

    $setOnInsert 当upsert为true时,并且发生了insert操作时,可以补充的字段.

    Option的作用:

    {upsert:true/false,multi:true/false}

    upsert---是指没有匹配的行,则直接插入该行.(和mysql中的replace一样)

    例:db.stu.update({name:'wuyong'},{$set:{name:'junshiwuyong'}},{upsert:true});

    如果有name=’wuyong’的文档,将被修改

    如果没有,将添加此新文档

    例:

    db.news.update({_id:99},{x:123,y:234},{upsert:true});

    没有_id=99的文档被修改,因此直接插入该文档

    multi: 是指修改多行(即使查询表达式命中多行,默认也只改1行,如果想改多行,可以用此选项)

    例:

    db.news.update({age:21},{$set:{age:22}},{multi:true});

    则把news中所有age=21的文档,都修改

    查: find, findOne

    语法: db.collection.find(查询表达式,查询的列);

    db.collections.find(表达式,{列1:1,列2:1});

    例1:db.stu.find()

    查询所有文档 所有内容

    例2: db.stu.find({},{gendre:1})

    查询所有文档,的gender属性 (_id属性默认总是查出来)

    例3: db.stu.find({},{gender:1, _id:0})

    查询所有文档的gender属性,且不查询_id属性

    例3: db.stu.find({gender:’male’},{name:1,_id:0});

    查询所有gender属性值为male的文档中的name属性

     例4:数据格式如下(嵌套查询)

    /* 1 */
    {
        "_id" : "550e0afa-ef96-4f97-991c-d3a5b8a6017c",
        "NewsCategory" : {
            "_id" : "1f263798-6c45-4910-a6f1-ff499b411cc0",
            "Name" : "体育新闻"
        },
        "Comments" : [ 
            {
                "_id" : "ae353f2e-cea6-4609-953d-43e188c44890",
                "Content" : "好看"
            }
        ],
        "CreateTime" : ISODate("2016-12-06T08:42:33.270Z")
    }

    查询Comments中_id="ae353f2e-cea6-4609-953d-43e188c44890"

    db.News.find({"Comments._id":"ae353f2e-cea6-4609-953d-43e188c44890"})

    查询表达式:

    1: 最简单的查询表达式

    {filed:value} ,是指查询field列的值为value的文档

    2: $ne --- != 查询表达式

    {field:{$ne:value}}

    作用--查filed列的值 不等于 value 的文档

    3: $nin --> not in

    4: $all

    语法: {field:{$all:[v1,v2..]}}

    是指取出 field列是一个数组,且至少包含 v1,v2值

    5: $exists

    语法: {field:{$exists:1}}

    作用: 查询出含有field字段的文档

    6: $nor,

    {$nor,[条件1,条件2]}

    是指  所有条件都不满足的文档为真返回

     db.user.find({$nor:[{name:"user1"},{age:20}]})  查询name不等于user1并且age不等于20

    7:用正则表达式查询 以”诺基亚”开头的商品

    例:db.goods.find({goods_name:/诺基亚.*/},{goods_name:1});

    8: 用$where表达式来查询

    例: db.goods.find({$where:'this.cat_id != 3 && this.cat_id != 11'});

    注意: 用$where查询时, mongodb是把bson结构的二进制数据转换为json结构的对象,

    然后比较对象的属性是否满足表达式.速度较慢

    update时可用的操作符

    例:

    ->db.user.insert({name:'lisi',age:12,sex:'male',height:123,area:'haidian'});

    ->db.user.update({name:'lisi'},{$set:{area:'chaoyang'},$unset:{height:1},$inc:{age:1},$rename:{sex:'gender'}});

    > db.user.find();

    { "_id" : ObjectId("51fc01c4f5de93e1f2856e33"), "age" : 13, "area" : "chaoyang", "gender" : "male", "name" : "lisi" }

    $setOnInsert ->相当于mysql中的列的默认值

    db.user.update({_id: "4"}, { $setOnInsert: { works: 5}}, {upsert: true})  

    执行insert操作时,操作给相应的字段赋值。

    MongoDB语法与现有关系型数据库SQL语法比较

    MongoDB语法 MySql语法
    db.test.find({'name':'foobar'}) <==> select * from test where name='foobar'
    db.test.find() <==> select * from test
    db.test.find({'ID':10}).count() <==> select count(*) from test where ID=10
    db.test.find().skip(10).limit(20) <==> select * from test limit 10,20
    db.test.find({'ID':{in:[25,35,45]}}) <==> select * from test where ID in (25,35,45)
    db.test.find().sort({'ID':-1}) <==> select * from test order by ID desc
    db.test.distinct('name',{'ID':{lt:20}}) <==> select distinct(name) from test where ID<20
    db.test.group({key:{'name':true},cond:{'name':'foo'},reduce:function(obj,prev){prev.msum+=obj.marks;},initial:{msum:0}}) <==> select name,sum(marks) from test group by name
    db.test.find('this.ID<20',{name:1}) <==> select name from test where ID<20
    db.test.insert({'name':'foobar','age':25})<==>insert into test ('name','age') values('foobar',25)
    db.test.remove({}) <==> delete * from test
    db.test.remove({'age':20}) <==> delete test where age=20
    db.test.remove({'age':{lt:20}}) <==> delete test where age<20
    db.test.remove({'age':{lte:20}}) <==> delete test where age<=20
    db.test.remove({'age':{gt:20}}) <==> delete test where age>20
    db.test.remove({'age':{gte:20}}) <==> delete test where age>=20
    db.test.remove({'age':{ne:20}}) <==> delete test where age!=20
    db.test.update({'name':'foobar'},{set:{'age':36}}) <==> update test set age=36 where name='foobar'
    db.test.update({'name':'foobar'},{$inc:{'age':3}}) <==> update test set age=age+3 where name='foobar'

    注意以上命令大小写敏感

  • 相关阅读:
    SQL Server中出现用户或角色在当前数据库已经存在的问题的解决
    vs项目中添加lib库的方法总结
    【转载】C++ Socket通信总结(附C++实现)
    【转载】windows socket函数详解
    如何在 Debian 9 下安装 LEMP 和 WHMCS 7.5
    13个云计算基础设施自动化的最佳工具
    5分钟打造一个前端性能监控工具
    我的处女作——设计模式之状态模式
    IOS逆向分析笔记——replay逆向分析
    IOS逆向分析——GL脚本的提取
  • 原文地址:https://www.cnblogs.com/yxlblogs/p/4907937.html
Copyright © 2020-2023  润新知