You are viewing a single comment's thread from:

RE: PyMongo开发指南

in #starnote • 6 days ago
# 创建数据库
db = client["test-database"]
# db = client.test_database

# 数据库列表
dblist = client.list_database_names()

# 创建集合
collection = db["test-collection"]
# collection = db.test_collection
# 注意: 在 MongoDB 中数据库和集合是"惰性创建"的, 第一次插入数据时才真正存在。 就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。
# 集合列表
collist = db.list_collection_names()

# 增加文档
# 集合插入一个文档使用 insert_one() 方法,该方法的第一参数是字典 name => value 对
post = {
    "author": "Mike",
    "text": "My first blog post!",
    "tags": ["mongodb", "python", "pymongo"]
}
res = collection.insert_one(post)
# 返回 _id 字段 res.inserted_id
# insert_one() 方法返回 InsertOneResult 对象,该对象包含 inserted_id 属性,它是插入文档的 id 值。

# 插入多个文档
# 插入多个文档使用 insert_many() 方法,该方法的第一参数是字典列表。
mycol = db["mycol"]
mylist = [
  { "name": "Taobao", "alexa": "100", "url": "https://www.taobao.com" },
  { "name": "QQ", "alexa": "101", "url": "https://www.qq.com" },
  { "name": "Facebook", "alexa": "10", "url": "https://www.facebook.com" },
  { "name": "知乎", "alexa": "103", "url": "https://www.zhihu.com" },
  { "name": "Github", "alexa": "109", "url": "https://www.github.com" }
]
result = mycol.insert_many(mylist)
# print("插入的 _id 列表:", result.inserted_ids)

# 查询
# 查询所有 
# find() 方法可以查询集合中的所有数据
for doc in collection.find():
    print(doc)

# 查询一条数据
collection.find_one()
collection.find_one({"author": "Mike"})

# 高级
myquery = { "name": { "$regex": "^R" } }
mydoc = collection.find(myquery)
myresult = collection.find().limit(3)
# sort() 方法第一个参数为要排序的字段,第二个字段指定排序规则,1 为升序,-1 为降序,默认为升序。
mydoc = mycol.find().sort("alexa") # 正序
mydoc = mycol.find().sort("alexa", -1) # 反序
mydoc = mycol.find().sort("age", -1).skip(0).limit(2):  # 按年龄降序,取前2条

# 更新数据
# update_one() 方法只能修匹配到的第一条记录,如果要修改所有匹配到的记录,可以使用 update_many()。
# find_one_and_update() 根据过滤器和排序条件从集合中更新单个文档,并返回更新的文档 
myquery = { "name": "张三" }
newvalues = { "$set": { "age": "32" } }  # $set 只改指定字段,其他字段保留)
result = mycol.update_one(myquery, newvalues)
result  = mycol.update_many(myquery, newvalues)

# find_one_and_update()
posts.find_one_and_update({"alexa": "10000"}, {"$set": {"alexa": "12345"}})

eg:
from pymongo import MongoClient
from bson.objectid import ObjectId
database_foods = client['foods']
col_desserts = database_foods['desserts']
document = {'_id': ObjectId('5fc5ebe4abb99571485ce8f0')}
updated_values = {'$set': {'price': 5}}
# Update the Document
col_desserts.update_one(document, updated_values)
# Find the Updated Document
updated_doc = col_desserts.find_one({'_id': ObjectId('5fc5ebe4abb99571485ce8f0')})
print(updated_doc)
# 注意: 这里的ObjectId格式, 不能是string!

# 删除数据
The delete_one() 删除单条
The delete_many() 删除多条
The drop() 删除整个集合.
The drop_database() 删除整个数据库.

# 我们可以使用 delete_one() 方法来删除一个文档,该方法第一个参数为查询对象,指定要删除哪些数据。
myquery = { "name": "Taobao" }
mycol.delete_one(myquery)

# 我们可以使用 delete_many() 方法来删除多个文档,该方法第一个参数为查询对象,指定要删除哪些数据。
# 删除所有 name 字段中以 F 开头的文档
myquery = { "name": {"$regex": "^F"} }
x = mycol.delete_many(myquery)

# 删除集合
# 我们可以使用 drop() 方法来删除一个集合
mycol = mydb["sites"]
mycol.drop()

# 删除整个数据库
client.drop_database("test-database")