本文目录导读:

是的,完全可以通过实用脚本来自动查询MongoDB数据,根据你的具体需求(定时查询、条件筛选、结果处理等),有多种实现方式,以下是几种主流方案及其示例:
Shell脚本 + mongosh(推荐)
基础查询脚本
#!/bin/bash
# query_mongo.sh
# MongoDB连接信息
HOST="localhost"
PORT="27017"
DATABASE="mydb"
COLLECTION="users"
# 执行查询
mongosh --host $HOST --port $PORT $DATABASE --eval "
db.getCollection('$COLLECTION').find(
{ status: 'active', age: { \$gte: 18 } },
{ name: 1, email: 1, age: 1 }
).limit(10)
" > query_result.json 2>&1
echo "查询完成,结果已保存到 query_result.json"
带参数和格式化的脚本
#!/bin/bash
# 支持参数传递
MIN_AGE=${1:-18}
STATUS=${2:-active}
mongosh --quiet --host localhost:27017 mydb --eval "
const results = db.users.find(
{ status: '$STATUS', age: { \$gte: $MIN_AGE } }
).toArray();
// 格式化输出
print(JSON.stringify(results, null, 2));
"
Python脚本(功能最强)
使用 pymongo 库
#!/usr/bin/env python3
# query_mongo.py
from pymongo import MongoClient
from datetime import datetime, timedelta
import json
def query_users_by_criteria():
# 连接MongoDB
client = MongoClient('mongodb://localhost:27017/')
db = client['mydb']
collection = db['users']
# 构建查询条件
pipeline = [
{
'$match': {
'status': 'active',
'created_at': {
'$gte': datetime.now() - timedelta(days=7)
}
}
},
{
'$group': {
'_id': '$department',
'count': {'$sum': 1},
'avg_age': {'$avg': '$age'}
}
},
{'$sort': {'count': -1}}
]
# 执行聚合查询
results = list(collection.aggregate(pipeline))
# 保存到文件
with open('query_result.json', 'w') as f:
json.dump(results, f, default=str, indent=2)
print(f"查询完成,共 {len(results)} 条记录")
return results
if __name__ == "__main__":
query_users_by_criteria()
带定时任务的脚本
#!/usr/bin/env python3
# scheduled_query.py
import schedule
import time
from pymongo import MongoClient
from datetime import datetime
def daily_report():
client = MongoClient('mongodb://localhost:27017/')
db = client['analytics']
# 查询昨日数据
yesterday = datetime.now() - timedelta(days=1)
results = db.events.find({
'timestamp': {
'$gte': yesterday.replace(hour=0, minute=0, second=0),
'$lt': datetime.now().replace(hour=0, minute=0, second=0)
}
})
# 处理数据并发送邮件/保存报告
with open(f'report_{datetime.now().strftime("%Y%m%d")}.json', 'w') as f:
json.dump(list(results), f, default=str)
# 每天凌晨1点执行
schedule.every().day.at("01:00").do(daily_report)
while True:
schedule.run_pending()
time.sleep(60)
Node.js脚本(适合全栈开发者)
#!/usr/bin/env node
// query_mongo.js
const { MongoClient } = require('mongodb');
const fs = require('fs').promises;
async function queryData() {
const uri = 'mongodb://localhost:27017';
const client = new MongoClient(uri);
try {
await client.connect();
const database = client.db('mydb');
const collection = database.collection('orders');
// 复杂的聚合查询
const pipeline = [
{
'$match': {
'status': 'completed',
'total': { '$gt': 100 }
}
},
{
'$lookup': {
'from': 'customers',
'localField': 'customer_id',
'foreignField': '_id',
'as': 'customer_info'
}
},
{ '$unwind': '$customer_info' },
{
'$project': {
'order_id': 1,
'total': 1,
'customer_name': '$customer_info.name',
'customer_email': '$customer_info.email',
'order_date': 1
}
}
];
const results = await collection.aggregate(pipeline).toArray();
// 保存结果
await fs.writeFile(
'orders_report.json',
JSON.stringify(results, null, 2)
);
console.log(`查询完成,获取到 ${results.length} 条订单`);
} finally {
await client.close();
}
}
queryData().catch(console.error);
实用的自动化脚本模式
带配置文件和环境变量的脚本
#!/bin/bash
# config_loader.sh
# 从.env文件加载配置
source .env
# 执行灵活的查询
mongosh --quiet "$MONGODB_URI" --eval "
const config = {
collection: '${COLLECTION:-users}',
condition: ${QUERY_CONDITION:-'{status: \"active\"}'}
};
print('正在查询集合: ' + config.collection);
const db = db.getSiblingDB('${DATABASE:-mydb}');
const results = db.getCollection(config.collection).find(
JSON.parse(config.condition)
).limit(50).toArray();
printjson(results);
"
组合多种操作的脚本
#!/usr/bin/env python3
# complex_query.py
import argparse
import json
from pymongo import MongoClient
from datetime import datetime
def main():
parser = argparse.ArgumentParser(description='MongoDB查询工具')
parser.add_argument('--collection', required=True, help='集合名称')
parser.add_argument('--fields', nargs='+', help='需要返回的字段')
parser.add_argument('--limit', type=int, default=100, help='限制返回条数')
parser.add_argument('--output', default='output.json', help='输出文件')
parser.add_argument('--sort', help='排序字段')
parser.add_argument('--group', help='分组字段')
args = parser.parse_args()
client = MongoClient('mongodb://localhost:27017/')
db = client['mydb']
collection = db[args.collection]
# 构建查询
projection = {field: 1 for field in args.fields} if args.fields else {}
cursor = collection.find(
{}, # 条件留空或从参数传入
projection
)
if args.sort:
cursor = cursor.sort(args.sort, -1) # 降序
if args.limit:
cursor = cursor.limit(args.limit)
results = list(cursor)
# 输出
with open(args.output, 'w') as f:
json.dump(results, f, default=str, indent=2)
print(f"成功导出 {len(results)} 条记录到 {args.output}")
if __name__ == "__main__":
main()
远程执行和定时任务
使用 cron 定时执行(Linux/Mac)
# crontab -e 添加以下行 # 每天凌晨2点执行数据查询 0 2 * * * /path/to/query_mongo.sh >> /var/log/mongo_query.log 2>&1 # 每小时检查一次数据 0 * * * * /path/to/check_data.py >> /var/log/check.log
使用 Windows 任务计划程序
# Windows PowerShell 脚本 $action = New-ScheduledTaskAction -Execute "C:\Python39\python.exe" -Argument "C:\scripts\query_mongo.py" $trigger = New-ScheduledTaskTrigger -Daily -At "03:00AM" Register-ScheduledTask -TaskName "MongoDB_Query" -Action $action -Trigger $trigger
使用建议
- 连接管理:始终使用连接池,避免频繁建立/关闭连接
- 错误处理:添加重试机制和错误日志
- 性能优化:使用索引、限制查询结果大小
- 安全性:避免硬编码凭据,使用环境变量或配置文件
- 日志记录:记录查询时间、结果数量等信息
这些脚本可以直接复制使用,根据你的具体需求调整参数和查询逻辑,如果你有特定的查询场景(如复杂的聚合管道、跨集合查询等),可以提供更多细节,我可以给出更精确的脚本示例。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播