MongoDB学习笔记

2019-09-26  本文已影响0人  eliteTyc
/*
    向数据库中插入文档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})

上一篇 下一篇

猜你喜欢

热点阅读