【问题标题】:How to delete a MongoDB collection in PyMongo如何在 PyMongo 中删除 MongoDB 集合
【发布时间】:2012-04-07 00:45:40
【问题描述】:

如果集合存在并且是否存在为空(从集合中删除所有),如何检查 PyMongo? 我试过了

collection.remove()

collection.remove({})

但它不会删除集合。该怎么做?

【问题讨论】:

    标签: python mongodb pymongo


    【解决方案1】:

    Pymongo 中的示例代码,带有注释作为解释:

    from pymongo import MongoClient
    connection = MongoClient('localhost', 27017) #Connect to mongodb
    
    print(connection.database_names())  #Return a list of db, equal to: > show dbs
    
    db = connection['testdb1']          #equal to: > use testdb1
    print(db.list_collection_names())        #Return a list of collections in 'testdb1'
    print("posts" in db.list_collection_names())     #Check if collection "posts" 
                                                #  exists in db (testdb1)
    
    collection = db['posts']
    print(collection.count() == 0)    #Check if collection named 'posts' is empty
    
    collection.drop()                 #Delete(drop) collection named 'posts' from db and all documents contained. 
    

    【讨论】:

    • 您真的想在每次检查集合是否存在时都查询数据库中的所有集合吗?
    • @MoatazElmasry,mongodb中还没有实现检查集合是否存在的方法,可以查看这个问题:jira.mongodb.org/browse/SERVER-1938
    • @MoatazElmasry 同时,如果您确实需要优化应用程序的性能,您可以求助于其他技术,例如预缓存收集结果。
    【解决方案2】:

    您应该使用.drop() 而不是.remove(),有关详细信息,请参阅文档:http://api.mongodb.org/python/current/api/pymongo/collection.html#pymongo.collection.Collection.drop

    =====

    很抱歉误解了您的问题。

    要检查集合是否存在,请在数据库上使用方法collection_names

    >>> collection_name in database.list_collection_names()
    

    要检查集合是否为空,请使用:

    >>> collection.count() == 0
    

    两者都会在结果中返回 True 或 False。

    【讨论】:

    • collection_names 已弃用。请改用list_collection_names
    【解决方案3】:

    你试过了吗:

    db.collection.remove();

    【讨论】:

    • db.collection.remove() 仅从集合中删除与 remove 中给出的查询匹配的所有记录。例如 db.collection.remove({name: 'abc'}) 将删除所有名称为 'abc' 的记录,remove 中的空查询将导致所有记录被删除,但集合将保持原样。
    猜你喜欢
    • 2011-04-23
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多