MongoDB常用操作


假设目前有data数据表,数据结构如下所示:

idnameagegender
0001张超18
0002张猛20
0003李丽19
0004王超凡21
0005吴桐21

mongoDB的查找操作

1.find_one
(1)查找一条数据,例如查找id为0001号的同学,语句为:

db.getCollection('data').find_one({"id":"0001"})

返回结果即,_id是存储对象的唯一标识,为mongo默认存储:

{
    "_id" : ObjectId("5b729f91ff98a9c886ea401c"),
   	"id" : "0001",
    "name" : "张超",
    "age" : 18,
    "gender":"男"
}

(2)根据范围查找,例如查找年龄大于20岁的同学,语句为,值得注意的是利用find_one函数仅仅返回一个结果,如若想查找全部结果,请使用find函数,使用方法与find_one类似,如果利用python,返回结果是一个cursor对象,可以遍历该对象查找所有结果:

db.getCollection('data').find_one({"age":{"$gt":20}})

返回结果即:

{
    "_id" : ObjectId("5b729f91ff98a9c886ea402b"),
   	"id" : "0004",
    "name" : "王超凡",
    "age" : 21,
    "gender":"男"
}

gt为大于,gte大于等于,lt为小于,lte为小于等于,ne为不等于,上述范围查找亦可用于字符串形式。范围查找可用“,”隔开,如大于10,小于20,即:{"$gt":10,"$lt":20}
(3)模糊匹配,例如查找姓“李”的同学,查询语句如下:

db.getCollection('data').find_one({"name":{"$regex":"李"}})

返回结果即:

{
    "_id" : ObjectId("5b729f91ff98a9c886ea4031"),
   	"id" : "0003",
    "name" : "李丽",
    "age" : 19,
    "gender":"女"
}

(4)两个字段的查询,例如查找21岁的女性同学,查询条件用“,”隔开,如下:

db.getCollection('data').find_one({"age":21,"gender":"女"})

返回结果即:

{
    "_id" : ObjectId("5b729f91ff98a9c886ea4024"),
   	"id" : "0005",
    "name" : "吴桐",
    "age" : 21,
    "gender":"女"
}

2.find
使用方法和find_one类似,返回结果需遍历查找。在mongo的客户端会全部显示,推荐一个好用的mongoDB客户端,操作直观且简洁Robo 3T客户端

mongoDB的排序操作

1.sort
sort函数是排序函数,参数如为1,升序,参数为-1,降序,一般应用为查找到的数据进行排序,例如男性同学按年龄降序,语句为:

db.getCollection('data').find({"gender":"男"}).sort({"age":-1})

返回结果即:

{
    "_id" : ObjectId("5b729f91ff98a9c886ea402b"),
   	"id" : "0004",
    "name" : "王超凡",
    "age" : 21,
    "gender":"男"
}
{
    "_id" : ObjectId("5d8e1b0eff98a9c886e3fd6f"),
   	"id" : "0002",
    "name" : "张猛",
    "age" : 20,
    "gender":"男"
}
{
    "_id" : ObjectId("5b729f91ff98a9c886ea401c"),
   	"id" : "0001",
    "name" : "张超",
    "age" : 18,
    "gender":"男"
}

使用python操作mongoDB时需要注意sort函数的写法,和客户端略有不同:

find({"name": "**"}).sort([("age", -1)]).limit(5)

这里再提一个会常用到的函数即limit,可以限制返回的结果个数,在上述语句的后面加.limit(1)就会只返回第一个结果。

mongoDB的插入操作

1.insert
insert方法较为简单,直接将一个dict类型的数据插入就可以。例如插入

student = {"id" : "0006","name" : "徐凤年","age" : 18,"gender":"男"}

语句为:

db.getCollection('data').insert(student)

2.insert_one,insert_many的用法类似,这里不再赘述

mongoDB的更新操作

1.update_one
更新一条数据,

db.getCollection('data').update_one(
   <query>,
   <update>,
   {
     upsert: <boolean>,
   }
)
  • query : update的查询条件,和find类似
  • update : update的对象,和insert类似
  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
    例如将“张超”同学年龄改完22岁,语句为:
db.getCollection('data').update_one({'name':'张超'},{"$set":{'age':'22'}})

2.update用法类似,多了参数,即(1)multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。(2)writeConcern :可选,抛出异常的级别。

mongoDB的删除操作

1.remove

db.getCollection('data').remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)
  • query :(可选)删除的文档的条件,用法和find类似
  • justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
  • writeConcern :(可选)抛出异常的级别。

mongo的进阶

记录自己使用过的一些复杂操作,便于查找和复现使用:
1.批量修改字段的名称
语句为:

db.getCollection('data').find({"gender":"男"}).forEach(function(item){db.getCollection('data').update({"_id":item._id},{$set:{"gender":"男性"}})})

该语句会将库中所有的性别是的数据改为性别是男性

第一次写博客,利用mongo整理训练语料,记录一些常用操作和小坑,如有错误请大家指出,避免误人子弟。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值