138 lines
5.7 KiB
Python
138 lines
5.7 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
数据库文档结构测试脚本
|
|
用于检查MongoDB中gameconfig集合的文档结构
|
|
"""
|
|
|
|
import json
|
|
from SMYMongoDBAPI import SMYMongoDBAPI
|
|
|
|
def test_database_documents():
|
|
"""测试数据库文档结构"""
|
|
print("=== 数据库文档结构测试 ===")
|
|
|
|
try:
|
|
# 初始化MongoDB API
|
|
mongo_api = SMYMongoDBAPI("test")
|
|
|
|
if not mongo_api.is_connected():
|
|
print("❌ MongoDB连接失败")
|
|
return
|
|
|
|
print("✅ MongoDB连接成功")
|
|
|
|
# 获取gameconfig集合
|
|
collection = mongo_api.get_collection("gameconfig")
|
|
|
|
print("\n=== 检查gameconfig集合中的所有文档 ===")
|
|
|
|
# 查找所有文档
|
|
documents = list(collection.find({}))
|
|
|
|
print(f"找到 {len(documents)} 个文档")
|
|
|
|
for i, doc in enumerate(documents):
|
|
print(f"\n--- 文档 {i+1} ---")
|
|
print(f"_id: {doc.get('_id')}")
|
|
print(f"config_type: {doc.get('config_type', '未找到')}")
|
|
|
|
# 检查是否有config_type字段
|
|
if 'config_type' in doc:
|
|
print(f"⚠️ 发现config_type字段: {doc['config_type']}")
|
|
else:
|
|
print("✅ 没有config_type字段")
|
|
|
|
# 显示文档的所有键
|
|
print(f"文档键: {list(doc.keys())}")
|
|
|
|
# 如果是作物配置,检查具体内容
|
|
if doc.get('config_type') == '作物数据配置':
|
|
print("\n=== 作物数据配置详细检查 ===")
|
|
|
|
# 检查作物数据结构
|
|
for key, value in doc.items():
|
|
if key not in ['_id', 'config_type']:
|
|
print(f"作物 {key}: {type(value)}")
|
|
|
|
if isinstance(value, dict):
|
|
# 检查作物的具体字段
|
|
crop_keys = list(value.keys())
|
|
print(f" 作物字段: {crop_keys}")
|
|
|
|
# 检查是否有字符串类型的字段被误认为是字典
|
|
for crop_key, crop_value in value.items():
|
|
if isinstance(crop_value, str) and crop_key in ['能否购买', '品质', '等级']:
|
|
print(f" ⚠️ 字段 {crop_key} 是字符串类型: '{crop_value}'")
|
|
elif isinstance(value, str):
|
|
print(f" ⚠️ 整个作物数据是字符串: '{value[:100]}...'")
|
|
|
|
print("\n=== 测试API方法返回的数据 ===")
|
|
|
|
# 测试get_crop_data_config方法
|
|
print("\n--- 测试get_crop_data_config ---")
|
|
crop_data = mongo_api.get_crop_data_config()
|
|
if crop_data:
|
|
print(f"返回数据类型: {type(crop_data)}")
|
|
print(f"返回数据键: {list(crop_data.keys()) if isinstance(crop_data, dict) else 'N/A'}")
|
|
|
|
# 检查是否还有config_type字段
|
|
if 'config_type' in crop_data:
|
|
print(f"⚠️ API返回的数据仍包含config_type: {crop_data['config_type']}")
|
|
else:
|
|
print("✅ API返回的数据不包含config_type字段")
|
|
|
|
# 检查第一个作物的数据结构
|
|
for crop_name, crop_info in crop_data.items():
|
|
if crop_name not in ['_id', 'config_type']:
|
|
print(f"\n作物 {crop_name}:")
|
|
print(f" 类型: {type(crop_info)}")
|
|
|
|
if isinstance(crop_info, dict):
|
|
print(f" 字段: {list(crop_info.keys())}")
|
|
|
|
# 检查关键字段
|
|
for key in ['能否购买', '品质', '等级']:
|
|
if key in crop_info:
|
|
value = crop_info[key]
|
|
print(f" {key}: {value} (类型: {type(value)})")
|
|
elif isinstance(crop_info, str):
|
|
print(f" ⚠️ 作物数据是字符串: '{crop_info[:50]}...'")
|
|
|
|
break # 只检查第一个作物
|
|
else:
|
|
print("❌ get_crop_data_config返回空数据")
|
|
|
|
# 测试get_item_config方法
|
|
print("\n--- 测试get_item_config ---")
|
|
item_data = mongo_api.get_item_config()
|
|
if item_data:
|
|
print(f"道具配置数据类型: {type(item_data)}")
|
|
if 'config_type' in item_data:
|
|
print(f"⚠️ 道具配置仍包含config_type: {item_data['config_type']}")
|
|
else:
|
|
print("✅ 道具配置不包含config_type字段")
|
|
|
|
# 测试find_documents方法
|
|
print("\n--- 测试find_documents方法 ---")
|
|
all_configs = mongo_api.find_documents("gameconfig", {})
|
|
if all_configs:
|
|
print(f"find_documents返回 {len(all_configs)} 个文档")
|
|
for doc in all_configs:
|
|
if 'config_type' in doc:
|
|
print(f"⚠️ find_documents返回的文档仍包含config_type: {doc['config_type']}")
|
|
else:
|
|
print(f"✅ 文档ID {doc.get('_id')} 不包含config_type字段")
|
|
|
|
except Exception as e:
|
|
print(f"❌ 测试过程中出错: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
|
|
finally:
|
|
if 'mongo_api' in locals():
|
|
mongo_api.disconnect()
|
|
print("\n✅ 数据库连接已关闭")
|
|
|
|
if __name__ == "__main__":
|
|
test_database_documents() |