原文链接: MongoDB 数组对象 查询
上一篇: pandas 表格 数据补全空值
下一篇: vue cli3 路由懒加载
stus = [
{
'name': 'a',
'friends': [
{
'name': 'a1',
'age': 1,
},
{
'name': 'a2',
'age': 1,
},
]
},
{
'name': 'b',
'friends': [
{
'name': 'b1',
'age': 2,
},
{
'name': 'ab2',
'age': 2,
},
]
},
{
'name': 'c',
'friends': [
{
'name': 'bc1',
'age': 3,
},
{
'name': 'c2',
'age': 3,
},
]
}
]
from pymongo import MongoClient
# 数据库连接配置
HOST = "localhost"
PORT = 27017
# 数据库版本以下划线分割, 需要创建对应的文件夹
DB_NAME = "stus"
client = MongoClient(HOST, PORT)
db = client[DB_NAME]
stu = db['stu']
def init():
stu.delete_many({})
print(stu.count())
stu.insert_many(stus)
print(stu.count())
def query_elemMatch():
# 查找朋友列表中名字含有c的人
filter = {
"friends": {
"$elemMatch": {
"name": {"$regex": "b"}
}}
}
res = stu.find(filter, {"_id": 0})
print(res)
for i in res:
print(i)
# {'name': 'b', 'friends': [{'name': 'b1', 'age': 2}, {'name': 'ab2', 'age': 2}]}
# {'name': 'c', 'friends': [{'name': 'bc1', 'age': 3}, {'name': 'c2', 'age': 3}]}
# 查找朋友列表中名字含有c的人
filter = {
"friends.name": {
"$regex": "b"
}
}
res = stu.find(filter, {"_id": 0})
print(res)
for i in res:
print(i)
# {'name': 'b', 'friends': [{'name': 'b1', 'age': 2}, {'name': 'ab2', 'age': 2}]}
# {'name': 'c', 'friends': [{'name': 'bc1', 'age': 3}, {'name': 'c2', 'age': 3}]}
def query_all():
# 查找朋友列表中名字含有c的人
filter = {
"friends.name": {
"$all": ["a1", 'a2']
}
}
res = stu.find(filter, {"_id": 0})
print(res)
for i in res:
print(i)
# {'name': 'a', 'friends': [{'name': 'a1', 'age': 1}, {'name': 'a2', 'age': 1}]}
filter = {
"friends.name": {
"$all": ['a']
}
}
res = stu.find(filter, {"_id": 0})
print(res)
for i in res:
print(i) # 空
# all 匹配为精确匹配, 必须相等, 而且不能嵌入正则
def main():
init()
query_elemMatch()
query_all()
if __name__ == '__main__':
main()