mongodb 基本操作 CRUD

    技术2022-07-10  143

    mongodb 基本操作 CRUD


    一,mongodb 基本操作 创建数据库

    语法: use databaseName ,如果有该数据库就切换到该数据库。没有则创建该数据库 例子: use runoob , runoob 如果有这个数据库就切换到这个数据库,没有则创建 输出 > switched to db runoob 这个创建数据库时直接使用 show dbs (查看数据库)是看不到的,需要插入一些数据才会看见

    删除数据库

    删除数据库时需要先切换到需要删除的数据库例: > use runoob -切换到需要删除的数据库 switched to db runoob -输出信息 > db.dropDatabase() -删除数据库,db表示当前数据库,类似 this { "dropped" : "runoob", "ok" : 1 } -输出信息

    创建集合,删除集合

    在 mongodb 中不需要手动创建集合 ,在插入数据时mongodb会自动创建 > db.createCollection("student") -创建集合(不建议) { "ok" : 1 } -输出信息 删除集合 > db.student.drop() -删除student 集合 > true -输出信息

    查看数据库 and 集合

    查看 数据库 > show dbs -也可以写 show databases 效果一样 admin 0.000GB config 0.000GB local 0.000GB test 0.000GB 查看集合 > show collections -查看集合也支持 show tables (关系型数据库的) student user

    insert(添加)

    语法:db.<collection>.insert(document) // db:当前数据库 emp:集合(如果有该集合就先集合中插入一条文档,否则创建该集合) insert:插入语句 db.emp.insert({ -插入一个文档 name : '小黑' ,sex : '男' ,age : '20' }); db.emp.insert([ -插入多个文档 { name : '小白' ,sex : '女' ,age : '19' } ,{ name : '小绿' ,sex : '女' ,age : '21' } ]); // mongodb 3.2添加了 insertOne(添加一个文档) 和 insertMany(添加多个文档)方法,使代码更加语义化 db.emp.insertOne({ -插入一个文档 name : '小黑' ,sex : '男' ,age : '20' }); db.emp.insertMany([ -插入多个文档 { name : '小白' ,sex : '女' ,age : '19' } ,{ name : '小绿' ,sex : '女' ,age : '21' } ]); PS:添加时每个文档会自动添加一个 "_id" 来确保每个文档的唯一性,当然我们也可以手动添加 例: { _id : 'hello' ,name : '小绿' ,sex : '女' ,age : '21' } 手动添加的话也要确保每个id是唯一的

    remove(删除)

    语法: db.collection.remove( <query>, - 删除条件 { justOne: <boolean>, - 是否删除只匹配到的第一个文档,默认false writeConcern: <document> - 抛出异常级别 } ) 例子: 删除全部 db.emp.remove({}); -() 里面不能不写 {} 一般也不会删全部(直接删集合不就好了嘛) // 按照id删除一个文档 db.emp.remove('5ef9d5aece2f5819e31de72e'); -'5ef9d5aece2f5819e31de72e' 默认按照id删除 // 按照名字删除 db.emp.remove({name : '狗子'});

    update(修改)

    语法: db.<collection>.update( <query>, - 更新条件 类似于sql的while <update>, - 更新内容 { [upsert]:false, - 如果数据没有是否插入,默认false [multi]:false, - 是否更新按条件查询出来的所有数据,默认为false(只更新找到的第一条) [writeConcern] - 抛出异常的级别 }) 例子: // 按照id更新一条数据 db.emp.update({ _id : ObjectId('5efaa5b887b4fd0ad4001662') },{ sex : '公' }); 上面这种更新会直接使用 {sec : '公'} 把之前的给替换掉 也就是说我之前的文档是 { name : '小绿' ,sex : '女' ,age : '21' } 会直接换成 {sec : '公'} 之前的 name 和 age 都会不见,如果想只更换里面的一个的话需要这样使用 db.emp.update( { name : '小xx' }, { $set:{ age:'20' } } ); 上面的会查找 到 name为 小xx 的文档,把里面的age换成 20 $set 为数据操作符,在最下方有一个表

    find(查询)

    // db.<collection>.find([条件(json)]) // 查询 emp 集合中所有文档 返回一个数组 db.emp.find({name : '小xx'}); // 查询emp集合中的所有文档 db.emp.find(); // 根据id查询 db.emp.find('5efaa5b887b4fd0ad4001662'); // 根据 性别 and 年龄查询 db.emp.find({sex : '男' , age : '20'}); // PS 存入时与查询时的数据类型要一致 age我之前存入的是string类型,条件直接这样 age : 20 是查询不到的 // 模糊查询 可以使用 正则表达式 db.emp.find({name : /小+[\S]{1}/}); db.emp.find({name : /小\S/}); // 查询集合中有多少条数据 返回 int - db.emp.find().count(); // 在上面我们说 find 返回的是数组那么就应该有length db.emp.find().length(); // 如果查询出来的数据绝不查看不方便 那么可以使用pretty()方法格式化数据 db.emp.find().pretty();

    数据操作符

    名称用法说明$inc{$inc:{field:value}}对一个数字字段的某个field增加value(说白了就递增多少)$set{$set:{field:value}}把文档中某个字段field的值设为value$unset{$unset:{field:1}}删除某个字段field$push{$push:{field:value}}把value追加到field里。注:field只能是数组类型,如果field不存在,会自动插入一个数组类型$pushAll{$pushAll:{field:value_array}}用法同 p u s h 一 样 , 只 是 push一样,只是 pushpushAll可以一次追加多个值到一个数组字段内。$pullAll{$pullAll:value_array}用法同$pull一样,可以一次性删除数组内的多个值。$addToSet{$addToSet:{field:value}}加一个值到数组内,而且只有当这个值在数组中不存在时才增加。$pop删除数组内第一个值:{KaTeX parse error: Expected 'EOF', got '}' at position 15: pop:{field:-1}}̲、删除数组内最后一个值:{pop:{field:1}}用于删除数组内的一个值$pull{$pull:{field:_value}}从数组field内删除一个等于_value的值$rename{$rename:{old_field_name:new_field_name}}对字段进行重命名
    Processed: 0.015, SQL: 9