1. 程式人生 > >mongodb 更新刪除內嵌list欄位值

mongodb 更新刪除內嵌list欄位值

        # 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 重新命名列

db.getCollection('private_enterprise'
).find({})

查詢結果如下,現在需要把 “證券程式碼” =》 “code” ; “發行人中文名稱” =》 “COMP_NAME”

{
    "_id" : ObjectId("594792ce10bba506b0e1cd26"),
    "證券程式碼" : "011697006.IB",
    "證券簡稱" : "16蘇沙鋼SCP009",
    "發行人中文名稱" : "江蘇沙鋼集團有限公司"
}


/* 2 */
{
    "_id" : ObjectId("594792ce10bba506b0e1cd27"),
    "證券程式碼" : "011697010.IB",
    "證券簡稱" : "16滬華信SCP006",
    "發行人中文名稱" : "上海華信國際集團有限公司"
}

語句:

db.getCollection('private_enterprise').update({},{$rename:{"發行人中文名稱":'COMP_NAME'}},false,true)
db.getCollection('private_enterprise').update({},{$rename:{"證券程式碼":'code'}},false,true)

修改後結果:

{
    "_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操作符更新欄位名有如下格式:

{$rename: { <field1>: <newName1>, <field2>: <newName2>, ... } }

新的欄位名必須和已經存在的欄位名不一樣,使用點號去指定一個內嵌的文件的欄位;
考慮如下集合文件:

db.students.update( { _id: 1 }, { $rename: { 'nickname': 'alias', 'cell': 'mobile' }

上面的操作重新命名nickname為alias、cell欄位名為mobile

二、規則

$rename操作符重新命名符合條件的文件欄位名;

如果文件已經存在一個欄位,$reanme操作符將會刪除掉這個欄位並且重新命名指定的欄位;

如果$rename操作符重新命名的欄位不存在那麼操作符什麼也不做;

對於內嵌文件欄位的重新命名$rename操作符的操作跟外部文件欄位是一樣的;

三、看如下的students集合文件

{
  "_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:

db.students.updateMany( {}, { $rename: { "nmae": "name" } } )

重新命名後的結果是:

{
  "_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操作符使用點號引用欄位,如果重新命名的欄位是同一個內嵌文件中的欄位也使用點號引用,如下:

db.students.update( { _id: 1 }, { $rename: { "name.first": "name.fname" } } )

上面的操作重新命名內嵌文件欄位first為fname

{
  "_id" : 1,
  "alias" : [ "The American Cincinnatus", "The American Fabius" ],
  "mobile" : "555-555-5555",
  "name" : { "fname" : "george", "last" : "washington" }
}

重新命名一個不存在的欄位:
當使用$rename操作符重新命名一個不存在的欄位時,操作符什麼也不做:

db.students.update( { _id: 1 }, { $rename: { 'wife': 'spouse' } } )

Mongodb刪除指定欄位

db.user.update({"email_state":{"$exists":true}},{"$unset":{"email_state",""}},{multi:true});

刪除user表的email_state欄位。

模版:

db.表.update({"field1":{"$exists":true}},{"$unset":{"field1",""}},{multi:true})

$exists:判斷存在該欄位。

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