前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mongodb 更新删除内嵌list字段值

mongodb 更新删除内嵌list字段值

作者头像
周小董
发布2019-03-25 11:37:06
3K0
发布2019-03-25 11:37:06
举报
文章被收录于专栏:python前行者python前行者
代码语言:javascript
复制
        # mongo建立连接
        if replicaset_mongo:
            self.client = MongoClient([host1_mongo, host2_mongo], replicaSet=replicaset_mongo, port=int(port_mongo))
            self.client.admin.authenticate(user_mongo, passwd_mongo)
            self.db = self.client['dm_bond']
        else:  # 连接mongo单机
            self.client = MongoClient(host_mongo, int(port_mongo))
            self.db = self.client['dm_bond']
            if user_mongo != ' ':  # (windows 运行)
                self.db.authenticate(user_mongo, passwd_mongo, source=authenticate)
        self.collection = self.db["bond_sentiment_bulletin"]
        self.collection.update_many(filter={"_id": doc['_id'], 'attach.srcUrlMd5': attach['srcUrlMd5']},
                                                update={'$set': {'attach.$.updateTime': attach['UpdateTime']},'$unset': {'attach.$.UpdateTime': ''}})

mongodb update 重命名列

代码语言:javascript
复制
db.getCollection('private_enterprise').find({})

查询结果如下,现在需要把 “证券代码” =》 “code” ; “发行人中文名称” =》 “COMP_NAME”

代码语言:javascript
复制
{
    "_id" : ObjectId("594792ce10bba506b0e1cd26"),
    "证券代码" : "011697006.IB",
    "证券简称" : "16苏沙钢SCP009",
    "发行人中文名称" : "江苏沙钢集团有限公司"
}


/* 2 */
{
    "_id" : ObjectId("594792ce10bba506b0e1cd27"),
    "证券代码" : "011697010.IB",
    "证券简称" : "16沪华信SCP006",
    "发行人中文名称" : "上海华信国际集团有限公司"
}

语句:

代码语言:javascript
复制
db.getCollection('private_enterprise').update({},{$rename:{"发行人中文名称":'COMP_NAME'}},false,true)
db.getCollection('private_enterprise').update({},{$rename:{"证券代码":'code'}},false,true)

修改后结果:

代码语言:javascript
复制
{
    "_id" : ObjectId("594792ce10bba506b0e1cd26"),
    "证券简称" : "16苏沙钢SCP009",
    "COMP_NAME" : "江苏沙钢集团有限公司",
    "code" : "011697006.IB"
}


/* 2 */
{
    "_id" : ObjectId("594792ce10bba506b0e1cd27"),
    "证券简称" : "16沪华信SCP006",
    "COMP_NAME" : "上海华信国际集团有限公司",
    "code" : "011697010.IB"
}

参数说明:

  • query : update的查询条件,类似sql update查询内where后面的。
  • update : update的对象和一些更新的操作符(如,,,inc…)等,也可以理解为sql update查询内set后面的
  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
  • writeConcern :可选,抛出异常的级别。

Mongodb字段更新$rename操作符

一、定义

$rename操作符更新字段名有如下格式:

代码语言:javascript
复制
{$rename: { <field1>: <newName1>, <field2>: <newName2>, ... } }

新的字段名必须和已经存在的字段名不一样,使用点号去指定一个内嵌的文档的字段; 考虑如下集合文档:

代码语言:javascript
复制
db.students.update( { _id: 1 }, { $rename: { 'nickname': 'alias', 'cell': 'mobile' }

上面的操作重命名nickname为alias、cell字段名为mobile

二、规则

$rename操作符重命名符合条件的文档字段名;

如果文档已经存在一个字段,$reanme操作符将会删除掉这个字段并且重命名指定的字段;

如果$rename操作符重命名的字段不存在那么操作符什么也不做;

对于内嵌文档字段的重命名$rename操作符的操作跟外部文档字段是一样的;

三、看如下的students集合文档
代码语言:javascript
复制
{
  "_id": 1,
  "alias": [ "The American Cincinnatus", "The American Fabius" ],
  "mobile": "555-555-5555",
  "nmae": { "first" : "george", "last" : "washington" }
}

{
  "_id": 2,
  "alias": [ "My dearest friend" ],
  "mobile": "222-222-2222",
  "nmae": { "first" : "abigail", "last" : "adams" }
}

{
  "_id": 3,
  "alias": [ "Amazing grace" ],
  "mobile": "111-111-1111",
  "nmae": { "first" : "grace", "last" : "hopper" }
}

重命名字段nmae为name:

代码语言:javascript
复制
db.students.updateMany( {}, { $rename: { "nmae": "name" } } )

重命名后的结果是:

代码语言:javascript
复制
{
  "_id": 1,
  "alias": [ "The American Cincinnatus", "The American Fabius" ],
  "mobile": "555-555-5555",
  "name": { "first" : "george", "last" : "washington" }
}

{
   "_id" : 2,
   "alias" : [ "My dearest friend" ],
   "mobile" : "222-222-2222",
   "name" : { "first" : "abigail", "last" : "adams" }
}

{ "_id" : 3,
  "alias" : [ "Amazing grace" ],
  "mobile" : "111-111-1111",
  "name" : { "first" : "grace", "last" : "hopper" } }

重命名内嵌文档中的字段: 重命名一个内嵌文档字段,调用$rename操作符使用点号引用字段,如果重命名的字段是同一个内嵌文档中的字段也使用点号引用,如下:

代码语言:javascript
复制
db.students.update( { _id: 1 }, { $rename: { "name.first": "name.fname" } } )

上面的操作重命名内嵌文档字段first为fname

代码语言:javascript
复制
{
  "_id" : 1,
  "alias" : [ "The American Cincinnatus", "The American Fabius" ],
  "mobile" : "555-555-5555",
  "name" : { "fname" : "george", "last" : "washington" }
}

重命名一个不存在的字段: 当使用$rename操作符重命名一个不存在的字段时,操作符什么也不做:

代码语言:javascript
复制
db.students.update( { _id: 1 }, { $rename: { 'wife': 'spouse' } } )

Mongodb删除指定字段

代码语言:javascript
复制
db.user.update({"email_state":{"$exists":true}},{"$unset":{"email_state",""}},{multi:true});

删除user表的email_state字段。

模版:

代码语言:javascript
复制
db.表.update({"field1":{"$exists":true}},{"$unset":{"field1",""}},{multi:true})

$exists:判断存在该字段。

注意在后面需要加上multi:true,删除多行。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年07月14日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • mongodb update 重命名列
  • Mongodb字段更新$rename操作符
    • 一、定义
      • 二、规则
        • 三、看如下的students集合文档
        • Mongodb删除指定字段
        相关产品与服务
        云数据库 MongoDB
        腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档