美文网首页
MongoDB学习笔记

MongoDB学习笔记

作者: eliteTyc | 来源:发表于2019-09-26 09:36 被阅读0次
    /*
        向数据库中插入文档document
        如果当前collection不存在会自动创建,如果存在会直接在collection中创建数据
        当我们向数据库中插入文档时,如果我们没有指定id,MongoDB会自动给我们的文档创建一个数据id
        - 以下两个方法是insert 的一个拆分
        - db.<collection>.insertOne();
            - 插入一个文档
        - db.<collection>.insertMany();
            - 插入多个文档
    */
    // 插入一条文档
    db.user.insert({name:"tyc",age:21})
    // 插入多条文档
    db.user.insert([
        {
            name:"tyh",
            age:23
        },
        {
            name:"张三",
            age:30
        }
    ])
    // 每次调用objectid时都会生成一个id,这也是MongoDB生成ID的方法,确保数据的唯一性
    ObjectId()
        // 自己指定id值,数据库就不会自动给我们创建了
    db.user.insert({_id:"hello",name:"自己指定",age:99})
    
    
    /*
    查询
        查询集合中所有符合条件的文档
        db.<collection>.find()
            - find 传入一个对象作为查询条件
    */
    // 查询id值为hello的文档
    db.user.find({_id:"hello"})
    // find返回的是一个集合,可以加索引取出对饮的文档
    db.user.find()[0]
    // 查看返回结果的条数
    db.user.find().count()
    // db.collection.findOne() 用来查询集合中符合条件的第一个文档
    db.user.findOne({age:21})
    
    
    /*
    修改
        db.collection.update(查询条件,新对象)
            - update默认情况下会使用新对象替换原来的对象,例如
            原始数据:
                {
                    "_id" : ObjectId("5d6cb714a3fdf63e5231744e"),
                    "name" : "tyc",
                    "age" : 21.0
                }
            更新数据:
                db.collection.update({name:"tyc"},{age:24})
            更新后数据:
                {
                    "_id" : ObjectId("5d6cb714a3fdf63e5231744e"),
                    "age" : 24.0
                }
            也就是说会,第二个参数会把原来的数据全部替换,而不是更新某一个值
    
            
            解决办法:使用操作符
            db.collection.update({name:"tyc"},{$set:{age:24}})
            $set表示设置查询到的文档的指定字段
            
            删除指定的字段$unset 后面需要删除的字段,值可以随意写,会删除age字段
            db.collection.update({name:"tyc"},{$unset:{age:1}})
    
    
    */
    // 将原来姓名为tyc的文档替换为第二个参数
    db.user.update({name:"tyc"},{name:"tyc",age:24})
    
    
    // 将原来姓名为tyc的文档的name字段更新为elite
    db.user.update({name:"tyc"},{$set:{name:"elite"}})
    
    // 删除姓名为elite的文档的age字段
    db.user.update({name:"elite"},{$unset:{age:"这里age值随意填写"}})
    
    
    /*
        更新注意:
        update只会更新第一个匹配的文档
        与updateOne一样只会更新第一个匹配的
        
        需要更新所有的匹配文档
        updateMany
    
    */
      
    //将第一个年龄为21的文档,name字段修改为tyc    
    db.user.update({age:21},{$set:{name:"tyc"}})
    db.user.updateOne({age:21},{$set:{name:"tyc"}})
    // 将所有年龄为21的文档,name字段修改为tyc
    db.user.updateMany({age:21},{$set:{name:"tyc"}})
    
    // 使用update的第三个参数 可以修改所有匹配的文档信息
    // {multi:true}表示是否修改多个默认为false,修改为true,就会修改所有匹配的文档
    db.user.update(
    {age:21},{$set:{name:"tyc"}},{multi:true}
    )
    
    
    /*
    删除
    db.collection.remove() 默认删除所有符合条件的文档
    db.collection.deleteOne() 删除第一个符合条件的文档
    db.collection.deleteMany() 删除所有符合条件的文档
    
    */
    
    // 删除id值为hello的文档
    db.user.remove({_id:"hello"})
    
    // 删除collection中的所有文档,必须要打{},清空集合
    db.user.remove({})
    // 删除collection
    db.user.drop()
    
    // 删除数据库
    db.dropDatabase()
    
    /*
    文档document之间的关系
        - 一对一
            - 丈夫和妻子
            - 实现方式:内嵌文档 
        - 一对多
            - 用户和订单
            - 文章和评论
            - 实现方式:内嵌文档or多集合
        - 多对多
            - 教师与学生
            - 实现方式:内嵌文档or多集合
    
    
    */
    // 内嵌文档实现一对一
    db.WifeAndHusband.insert([
    {name:"黄蓉",husband:{name:"郭靖"}},
    {name:"张飞",husband:{name:"李白"}}
    ])
    // 多集合实现一对多 用户users和订单orders
    db.users.insert([
        {_id:1,name:"张三"},
        {_id:2,name:"李四"},
    ])
    db.orders.insert([
          {list:["香蕉","苹果"],userid:1},
          {list:["香蕉1","苹果1"],userid:1},
          {list:["香蕉2","苹果2"],userid:2},
          {list:["香蕉3","苹果3"],userid:2}
        
    ])
    // 查询语句,就是先查询出姓名为张三的用户的id赋值给外面的查询语句      
    db.orders.find({userid:db.users.findOne({name:"张三"})._id})
    
    
    // 多集合实现多对多,教师teachers和学生stus
    db.teachers.insert([
    {_id:1,name:"张三"},
    {_id:2,name:"李四"},
    {_id:3,name:"王五"},
    
    ])
    
    db.stus.insert([
       {name:"孙悟空",teacher_ids:[1,2]},
       {name:"猪八戒",teacher_ids:[1,2,3]},
    ])
       
    /*
       sort
       查询文档时默认按照——id值来排序,升序排列
       sort函数指定排序规则传递一个对象来指定按照哪个字段来排序,对象值1为升序排列,-1位降序排列
       
       */
       
    db.nbusers.insert([
       {name:"张三",age:40,sal:3000},
       {name:"张三1",age:7,sal:1500},
       {name:"张三2",age:5,sal:2000},
       {name:"张三3",age:1,sal:4000},
       {name:"张三4",age:3,sal:1000},
       {name:"张三5",age:20,sal:1800},
       {name:"张三6",age:10,sal:2200},
       {name:"张三7",age:4,sal:500},
       
       ])
    //    默认查询,按照——id来排序,也就是对象的创建时间来排序
       db.nbusers.find()
    //    按照年龄升序排序
       db.nbusers.find().sort({age:1})
    //    按照年龄降序来排序
       db.nbusers.find().sort({age:-1})
    //    按照工资升序排序
       db.nbusers.find().sort({sal:1})
    //    按照工资降序来排序
       db.nbusers.find().sort({sal:-1})
    //    先按照年龄升序排序,两个年龄一样的时候,按照工资的降序排序
       db.nbusers.find().sort({age:1,sal:-1})
       
       
    /*
       查询时,只要指定的字段的投影,需要使用到查询方法的第二个参数
       
       */
       //    查询时只要返回姓名字段,1表示要0表示不要,—id、默认都会返回,这里直接设置0不返回id值
       db.nbusers.find({},{_id:0,name:1})
    
    

    相关文章

      网友评论

          本文标题:MongoDB学习笔记

          本文链接:https://www.haomeiwen.com/subject/uxqhyctx.html