如何在PyMongo中删除MongoDB集合

37

如何在 PyMongo 中检查集合是否存在,如果存在则检查是否为空(从集合中删除所有内容)?

我已经尝试过类似于

collection.remove()
或者
collection.remove({})

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

3个回答

72

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. 

你真的想每次想要检查集合是否存在时都要查询数据库中的所有集合吗? - Moataz Elmasry
1
@MoatazElmasry,MongoDB中检查集合是否存在的方法尚未实现,您可以在此问题上进行检查:https://jira.mongodb.org/browse/SERVER-1938 - EwyynTomato
@MoatazElmasry 同时,如果您真的需要优化应用程序的性能,可以采用其他技术,例如预缓存集合结果。 - EwyynTomato

20

1
collection_names 已弃用,请使用 list_collection_names 代替。 - Nigel Ainscoe
这个有效。但是它会在不经过确认的情况下删除所有内容,这很可怕... - citynorman
@citynorman 好的,这是一个API而不是CLI,假设您知道自己在做什么,其他DSL(如MySQL的DROP TABLE)也是如此。 - Reorx

5
你尝试过这个吗:
db.collection.remove();

db.collection.remove() 只会删除符合 remove 中给定查询条件的集合中所有记录。例如,db.collection.remove({name: 'abc'}) 将删除所有名为 'abc' 的记录。如果在 remove 中使用空查询,则会删除所有记录,但集合本身将保持不变。 - Dania

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接