mongoデータベースの基本操作--python編

79311 ワード

データベースの接続
MongoClient VS Connection
class MongoClient(pymongo.common.BaseObject)

 |  Connection to MongoDB.

 |

 |  Method resolution order:

 |      MongoClient

 |      pymongo.common.BaseObject

 |      __builtin__.object

 |

 
class Connection(pymongo.mongo_client.MongoClient)

 |  Connection to MongoDB.

 |

 |  Method resolution order:

 |      Connection

 |      pymongo.mongo_client.MongoClient

 |      pymongo.common.BaseObject

 |      __builtin__.object

 
この2つのクラスの継承から見ると、connectionはMongoClientを継承しているので、ConnectionではなくMongoClientを使用することをお勧めします.(つまり、MongoClientはメソッドConnectionを使っても使えます)
from pymongo import MongoClient

client = MongoClient('192.168.40.87', 27037)

db_name = 'TCL_Useraction'

db = client[db_name]

collection_useraction = db['useraction']

 
ここでは辞書でデータベースと集合にアクセスし、同時に通過することもできます.(ポイント)アクセス
データの挿入
save() VS insert()
mongodb save insert      collection     ,         :

、save , insert update . ,insert , save ; , . , " , ".

、insert , , , save , 。

データの更新
単一のデータでは、更新後にsaveメソッドを使用できます.
update(criteria,objNew,upsert,mult)criteria:更新が必要な条件式objNew:更新式upsert:ターゲットレコードが存在しない場合、新しいドキュメントを挿入するかどうか.Multi:複数のドキュメントを更新するかどうか.
collection_useraction.update({'gid':last_gid, 'time':l_date}, {'$set':{'gid':last_gid}, '$set':{'time':l_date}, '$addToSet':{'categories':category_data}}, upsert=True)

 
データの削除
db.users.drop()#コレクションの削除
remove(self, spec_or_id=None, safe=None, multi=True, **kwargs)
#remove()は、単一またはすべてのドキュメントを削除するために使用され、削除後のドキュメントは復元できません.id = db.users.find_one({"name":"user2"})["_id"] db.users.remove(id)#idに基づいてレコードdbを削除する.users.remove()#コレクション内のすべてのレコードdbを削除します.users.remove({'yy':5})#yy=5のレコードを削除
検索
  5.   

    #    age    15  

    for u in db.users.find({"age":{"$lt":15}}): print u



  5.1       

    #    name    user8  

    for u in db.users.find({"name":"user8"}): print u



    #        

    u2 = db.users.find_one({"name":"user9"}) #        None

    print u2



  5.2       (fields)

    # select name, age from users where age = 21

    for u in db.users.find({"age":21}, ["name", "age"]): print u

    for u in db.users.find(fields = ["name", "age"]): print u



  5.3   (SORT)

    pymongo.ASCENDING  #      1    

    pymongo.DESCENDING #      -1    

    for u in db.users.find().sort([("age", pymongo.ASCENDING)]): print u   # select * from     order by  1

    for u in db.users.find().sort([("age", pymongo.DESCENDING)]): print u  # select * from     order by  1 desc

    for u in db.users.find().sort([(" 1", pymongo.ASCENDING), (" 2", pymongo.DESCENDING)]): print u # select * from     order by  1 asc,  2 desc

    for u in db.users.find(sort = [(" 1", pymongo.ASCENDING), (" 2", pymongo.DESCENDING)]): print u # sort       

    for u in db.users.find({"name":"user9"}, sort=[['name',1],['sex',1]], fields = ["name", "age", 'sex']): print u  #     



  5.4         (SLICE),     (LIMIT)

    # select * from     skip 2 limit 3

    # MySQL    : select * from     limit 2, 3

    for u in db.users.find().skip(2).limit(3): print u

    for u in db.users.find(skip = 2, limit = 3): print u



    #         skip & limit (mongo    $slice       )。

    for u in db.users.find()[2:5]: print u



    #     

    for u in db.users.find().skip(2): print u

    for u in db.users.find(skip=1): print u

    for u in db.users.find().limit(5): print u

    for u in db.users.find(limit = 3): print u



  5.5      (Conditional Operators)    # like            

    # select * from users where name = 'user3' and age > 12 and age < 15

    for u in db.users.find({'age': {'$gt': 12, '$lt': 15}, 'name': 'user3'}): print u

    # select * from users where name = 'user1' and age = 21

    for u in db.users.find({"age":21, "name":"user1"}): print u



  5.6 IN

    for u in db.users.find({"age":{"$in":(23, 26, 32)}}): print u   # select * from users where age in (23, 26, 32)

    for u in db.users.find({"age":{"$nin":(23, 26, 32)}}): print u  # select * from users where age not in (23, 26, 32)



  5.7     (COUNT)

    print(db.users.count())  # select count(*) from users

    print(db.users.find({"age":{"$gt":30}}).count()) # select count(*) from users where age > 30



  5.8 OR

    for u in db.users.find({"$or":[{"age":25}, {"age":28}]}): print u  # select * from     where  1 =  1 or  1 =  2

    for u in db.users.find({"$or":[{"age":{"$lte":23}}, {"age":{"$gte":33}}]}): print u  # select * from     where  1 <=  1 or  1 >=  2

 
  6.      (exists)

    db.users.find({'sex':{'$exists':True}})  # select * from     where exists  1

    db.users.find({'sex':{'$exists':False}}) # select * from     where not exists  1



  7.        

    for u in db.users.find({"name" : {"$regex" : r"(?i)user[135]"}}, ["name"]): print u #     name   user1, user3, user5  



  8.           

    Document    JSON-like       ,           (Embed)               (Reference)。

    MongoDB     "."     namespace   ,               



    #

    db.   .find_one({'address':"address1"}) # address     ,          

    #      :{"_id" : ObjectId("4c479885089df9b53474170a"), "name" : "user1", "address" : ["address1", "address2"]}



    #                ,  "."   

    u = db.   .find_one({"im.qq":12345678})

    #      :{"_id" : ObjectId("4c479885089df9b53474170a"), "name" : "user1", "im" : {"msn" : "[email protected]", "qq" : 12345678}}



    print u['im']['msn']  #[email protected]



    #        

    db.   .update({"im.qq":12345678}, {'$set':{"im.qq":12345}})



    #         

    for u in db.users.find({"im.qq":{'$exists':True}}, {"im.qq":1}): print u

    #    : { "_id" : ObjectId("4c479885089df9b53474170a"), "im" : { "qq" : 12345 } }





    for u in db.users.find({'data':"abc"}): print u

    #    : { "_id" : ObjectId("4c47a481b48cde79c6780df5"), "name" : "user8", "data" : [ { "a" : 1, "b" : 10 }, 3, "abc" ] }

    for u in db.users.find({'data':{'$elemMatch':{'a':1, 'b':{'$gt':5}}}}): print u

    #    : { "_id" : ObjectId("4c47a481b48cde79c6780df5"), "name" : "user8", "data" : [ { "a" : 1, "b" : 10 }, 3, "abc" ] }

    {data:"abc"}                 。$elemMatch                。           :

    db.   .find({"data.a":1, "data.b":{'$gt':5}})



       ,              :

    db.   .find({"data.1":3}) #    0  





    #         

    {"classifyid":"test1",

          "keyword":[

                {"name":'test1', #        test5 (     0  ,      )

                "frequence":21,

                },

                {"name":'test2', #

                "frequence":50,

                },

          ]

    }

    #      (         )

    db.   .update({"classifyid":"test1"}, {"$set":{"keyword.0.name":'test5'}})

    #      

    db.   .find({"classifyid":"test1", "keyword.0.name":"test2"})

 
操作
  (1) $all:               。

    db.users.insert({'name':"user3", 'data':[1,2,3,4,5,6,7]})

    db.users.insert({'name':"user4", 'data':[1,2,3]})



    for u in db.users.find({'data':{'$all':[2,3,4]}}): print u

    #   : { "_id" : ObjectId("4c47a133b48cde79c6780df0"), "name" : "user3", "data" : [ 1, 2, 3, 4, 5, 6, 7 ] }

        $in    。$in                   ,  $all               。



  (2) $size:           。

    for u in db.users.find({'data':{'$size':3}}): print u

    #            : { "_id" : ObjectId("4c47a13bb48cde79c6780df1"), "name" : "user4", "data" : [ 1, 2, 3 ] }



  (3) $type:       。

    for u in db.users.find({'t':{'$type':1}}): print u  #        

    for u in db.users.find({'t':{'$type':2}}): print u  #         



       :

        double:1

        string: 2

        object: 3

        array: 4

        binary data: 5

        object id: 7

        boolean: 8

        date: 9

        null: 10

        regular expression: 11

        javascript code: 13

        symbol: 14

        javascript code with scope: 15

        32-bit integer: 16

        timestamp: 17

        64-bit integer: 18

        min key: 255

        max key: 127



  (4) $not:   ,            。

             $mod     ????

    #        



  (5) $unset:   $set   ,        。

    for u in db.users.find({'name':"user1"}): print u

    #    : { "_id" : ObjectId("4c479885089df9b53474170a"), "name" : "user1", "age" : 15, "address" : [ "address1", "address2" ] }



    db.users.update({'name':"user1"}, {'$unset':{'address':1, 'age':1}})

    for u in db.users.find({'name':"user1"}): print u

    #    : { "_id" : ObjectId("4c479885089df9b53474170a"), "name" : "user1" }



  (6) $push:   $ pushAll            。#         

    for u in db.users.find({'name':"user1"}): print u

    #    : { "_id" : ObjectId("4c479885089df9b53474170a"), "age" : 15, "name" : "user1" }



    db.users.update({'name':"user1"}, {'$push':{'data':1}})

    for u in db.users.find({'name':"user1"}): print u

    #    : { "_id" : ObjectId("4c479885089df9b53474170a"), "age" : 15, "data" : [ 1 ], "name" : "user1" }



    db.users.update({'name':"user1"}, {'$pushAll':{'data':[2,3,4,5]}})

    for u in db.users.find({'name':"user1"}): print u

    #    : { "_id" : ObjectId("4c479885089df9b53474170a"), "age" : 15, "data" : [ 1, 2, 3, 4, 5 ], "name" : "user1" }



  (7) $addToSet:   $push   ,               (Set          )。

    db.users.update({'name':"user2"}, {'$unset':{'data':1}})

    db.users.update({'name':"user2"}, {'$addToSet':{'data':1}})

    db.users.update({'name':"user2"}, {'$addToSet':{'data':1}})

    for u in db.users.find({'name':"user2"}): print u

    #   : { "_id" : ObjectId("4c479896089df9b53474170b"), "data" : [ 1 ], "name" : "user2" }



    db.users.update({'name':"user2"}, {'$push':{'data':1}})

    for u in db.users.find({'name':"user2"}): print u

    #   : { "_id" : ObjectId("4c479896089df9b53474170b"), "data" : [ 1, 1 ], "name" : "user2" }



           ,   $each。

    db.users.update({'name':"user2"}, {'$addToSet':{'data':{'$each':[1,2,3,4]}}})

    for u in db.users.find({'name':"user2"}): print u

    #   : {u'age': 12, u'_id': ObjectId('4c479896089df9b53474170b'), u'data': [1, 1, 2, 3, 4], u'name': u'user2'}

    #           



  (8) $each        。

    db.users.update({'name':"user2"}, {'$unset':{'data':1}})

    db.users.update({'name':"user2"}, {'$addToSet':{'data':1}})

    for u in db.users.find({'name':"user2"}): print u

    #   : { "_id" : ObjectId("4c479896089df9b53474170b"), "data" : [ 1 ], "name" : "user2" }



    db.users.update({'name':"user2"}, {'$addToSet':{'data':{'$each':[1,2,3,4]}}})

    for u in db.users.find({'name':"user2"}): print u

    #   : {u'age': 12, u'_id': ObjectId('4c479896089df9b53474170b'), u'data': [1, 2, 3, 4], u'name': u'user2'}



    db.users.update({'name':"user2"}, {'$addToSet':{'data':[1,2,3,4]}})

    for u in db.users.find({'name':"user2"}): print u

    #   : { "_id" : ObjectId("4c479896089df9b53474170b"), "data" : [ 1, 2, 3, 4, [ 1, 2, 3, 4 ] ], "name" : "user2" }



    db.users.update({'name':"user2"}, {'$unset':{'data':1}})

    db.users.update({'name':"user2"}, {'$addToSet':{'data':[1,2,3,4]}})

    for u in db.users.find({'name':"user2"}): print u

    #   : { "_id" : ObjectId("4c47a133b48cde79c6780df0"), "data" : [ [1, 2, 3, 4] ], "name" : "user2" }



  (9) $pop:          (       ),$pull     ,$pullAll            。

    db.users.update({'name':"user2"}, {'$unset':{'data':1}})

    db.users.update({'name':"user2"}, {'$addToSet':{'data':{'$each':[1, 2, 3, 4, 5, 6, 7, 2, 3 ]}}})

    for u in db.users.find({'name':"user2"}): print u

    #   : { "_id" : ObjectId("4c47a133b48cde79c6780df0"), "data" : [ 1, 2, 3, 4, 5, 6, 7, 2, 3 ], "name" : "user2" }



    db.users.update({'name':"user2"}, {'$pop':{'data':1}}) #         

    for u in db.users.find({'name':"user2"}): print u

    #   : { "_id" : ObjectId("4c47a133b48cde79c6780df0"), "data" : [ 1, 2, 3, 4, 5, 6, 7, 2 ], "name" : "user2" }



    db.users.update({'name':"user2"}, {'$pop':{'data':-1}}) #        

    for u in db.users.find({'name':"user2"}): print u

    #   : { "_id" : ObjectId("4c47a133b48cde79c6780df0"), "data" : [ 2, 3, 4, 5, 6, 7, 2 ], "name" : "user2" }



    db.users.update({'name':"user2"}, {'$pull':{'data':2}}) #      2

    for u in db.users.find({'name':"user2"}): print u

    #   : { "_id" : ObjectId("4c47a133b48cde79c6780df0"), "data" : [ 3, 4, 5, 6, 7 ], "name" : "user2" }



    db.users.update({'name':"user2"}, {'$pullAll':{'data':[3,5,6]}}) #    3,5,6

    for u in db.users.find({'name':"user2"}): print u

    #   : { "_id" : ObjectId("4c47a133b48cde79c6780df0"), "data" : [ 4, 7 ], "name" : "user2" }



  (10) $where:   JS            $lt、$gt。

    MongoDB     Javascript Engine (SpiderMonkey)。      JS Expression,     JS Function       Code Block。



    db.users.remove() #           

    for i in range(10):

        db.users.insert({'name':"user" + str(i), 'age':i})

    for u in db.users.find(): print u

    #

    { "_id" : ObjectId("4c47b3372a9b2be866da226e"), "name" : "user0", "age" : 0 }

    { "_id" : ObjectId("4c47b3372a9b2be866da226f"), "name" : "user1", "age" : 1 }

    { "_id" : ObjectId("4c47b3372a9b2be866da2270"), "name" : "user2", "age" : 2 }

    { "_id" : ObjectId("4c47b3372a9b2be866da2271"), "name" : "user3", "age" : 3 }

    { "_id" : ObjectId("4c47b3372a9b2be866da2272"), "name" : "user4", "age" : 4 }

    { "_id" : ObjectId("4c47b3372a9b2be866da2273"), "name" : "user5", "age" : 5 }

    { "_id" : ObjectId("4c47b3372a9b2be866da2274"), "name" : "user6", "age" : 6 }

    { "_id" : ObjectId("4c47b3372a9b2be866da2275"), "name" : "user7", "age" : 7 }

    { "_id" : ObjectId("4c47b3372a9b2be866da2276"), "name" : "user8", "age" : 8 }

    { "_id" : ObjectId("4c47b3372a9b2be866da2277"), "name" : "user9", "age" : 9 }



    for u in db.users.find({"$where":"this.age > 7 || this.age < 3"}): print u

    #

    {u'age': 0.0, u'_id': ObjectId('4c47b3372a9b2be866da226e'), u'name': u'user0'}

    {u'age': 1.0, u'_id': ObjectId('4c47b3372a9b2be866da226f'), u'name': u'user1'}

    {u'age': 2.0, u'_id': ObjectId('4c47b3372a9b2be866da2270'), u'name': u'user2'}

    {u'age': 8.0, u'_id': ObjectId('4c47b3372a9b2be866da2276'), u'name': u'user8'}

    {u'age': 9.0, u'_id': ObjectId('4c47b3372a9b2be866da2277'), u'name': u'user9'}



    for u in db.users.find().where("this.age > 7 || this.age < 3"): print u

    #

    {u'age': 0.0, u'_id': ObjectId('4c47b3372a9b2be866da226e'), u'name': u'user0'}

    {u'age': 1.0, u'_id': ObjectId('4c47b3372a9b2be866da226f'), u'name': u'user1'}

    {u'age': 2.0, u'_id': ObjectId('4c47b3372a9b2be866da2270'), u'name': u'user2'}

    {u'age': 8.0, u'_id': ObjectId('4c47b3372a9b2be866da2276'), u'name': u'user8'}

    {u'age': 9.0, u'_id': ObjectId('4c47b3372a9b2be866da2277'), u'name': u'user9'}



    #        function, javascript   

    for u in db.users.find().where("function() { return this.age > 7 || this.age < 3;}"): print u

    #

    {u'age': 0.0, u'_id': ObjectId('4c47b3372a9b2be866da226e'), u'name': u'user0'}

    {u'age': 1.0, u'_id': ObjectId('4c47b3372a9b2be866da226f'), u'name': u'user1'}

    {u'age': 2.0, u'_id': ObjectId('4c47b3372a9b2be866da2270'), u'name': u'user2'}

    {u'age': 8.0, u'_id': ObjectId('4c47b3372a9b2be866da2276'), u'name': u'user8'}

    {u'age': 9.0, u'_id': ObjectId('4c47b3372a9b2be866da2277'), u'name': u'user9'}