result = mongo_db.user_collection.aggregate([{"$lookup":{"from": "payCondition","localField": "i_ui_identifier","foreignField": "userId","as": "nvc_user_name"}}])怎么在上述Mongo语句的结果中查找addtime字段大于系统时间-1天的数据
时间: 2023-07-19 17:46:28 浏览: 122
你可以在 `$lookup` 后添加一个 `$match` 语句来筛选匹配结果中 `addtime` 大于系统时间-1天的数据。
例如,假设系统时间为当前时间减去一天:
```
import datetime
one_day_ago = datetime.datetime.now() - datetime.timedelta(days=1)
```
你可以在 `$lookup` 后添加以下 `$match` 语句:
```
{"$match": {"nvc_user_name.addtime": {"$gt": one_day_ago}}}
```
完整的语句如下:
```
result = mongo_db.user_collection.aggregate([
{"$lookup": {
"from": "payCondition",
"localField": "i_ui_identifier",
"foreignField": "userId",
"as": "nvc_user_name"
}},
{"$match": {"nvc_user_name.addtime": {"$gt": one_day_ago}}}
])
```
这将返回匹配条件的所有记录。
相关问题
为什么,下的的代码返回为空:one_day_ago = datetime.datetime.now() - datetime.timedelta(days=30) result = mongo_db.user_collection.aggregate([{"$lookup":{"from": "payCondition","localField": "i_ui_identifier","foreignField": "userId","as": "nvc_user_name"}},{"$match": {"payCondition.addTime": {"$gt": one_day_ago}}}]) print(list(result)),如何修改python代码
根据你提供的代码,我看到你使用了 MongoDB 的聚合操作,使用了 `$lookup` 和 `$match` ,目前你的代码中存在一个问题,`one_day_ago` 变量是一个 `datetime` 类型,但是在 `$match` 中需要传入的是一个 `ISODate` 类型的时间值,因此你需要将 `one_day_ago` 转换为 `ISODate` 类型的时间值。你可以使用 `datetime` 模块的 `strftime` 函数将其转换为字符串,然后再转换为 `ISODate` 类型。修改后的代码如下:
```
import datetime
one_day_ago = datetime.datetime.now() - datetime.timedelta(days=30)
iso_one_day_ago = datetime.datetime.strftime(one_day_ago, '%Y-%m-%dT%H:%M:%S.%fZ')
result = mongo_db.user_collection.aggregate([
{"$lookup": {"from": "payCondition", "localField": "i_ui_identifier", "foreignField": "userId", "as": "nvc_user_name"}},
{"$match": {"payCondition.addTime": {"$gt": iso_one_day_ago}}}
])
print(list(result))
```
注意,这里使用了 `strftime` 函数将 `one_day_ago` 转换为 `'%Y-%m-%dT%H:%M:%S.%fZ'` 格式的字符串,这是 MongoDB 中 `ISODate` 的标准格式。
one_day_ago = datetime.datetime.now() - datetime.timedelta(days=3) result = mongo_db.user_collection.aggregate([{"$lookup":{"from": "payCondition","localField": "i_ui_identifier","foreignField": "userId","as": "nvc_user_name"}},{"$match": {"nvc_user_name.addtime": {"$gt": one_day_ago}}}]) print(result) # 连接mysql数据库 mysql_conn = mysql.connector.connect(host='172.16.2.246', port='33060', user='root', password='8ach4b6f9c', database='testdata_analyse',) mysql_cursor = mysql_conn.cursor() for row in result: var_title = row[0], var_type_name = row[1], var_company_name = row[2], var_source = row[3], var_succees_cause = row[4], is_succeed = row[5], dt_add_time = row[6], var_user_name = row[7] mysql_cursor.execute("INSERT INTO t_wuliu_information_pay_statistic VALUES (%s, %s, %s, %s, %s,%s,%s,%s)", (var_title,var_type_name,var_company_name,var_source,var_succees_cause,is_succeed,dt_add_time,var_user_name)) mysql_result = mysql_cursor.fetchall() print(mysql_result) mysql_conn.commit()这段python代码为什么result还有结果,但是就不插入到mysql的表中呢?怎么修改这个python代码
这段 Python 代码可能存在以下问题:
1. 可能是查询结果中没有匹配到任何记录,导致没有进行插入操作。你可以在插入数据之前,先打印出查询结果看一下。
2. 插入数据时使用的参数数量和参数类型与表格定义的不一致。你可以检查表格定义和插入语句参数数量及数据类型是否一致。
3. 插入数据时出现了一些异常,导致事务没有被提交。你可以在插入数据之后,手动提交事务。
改进的代码如下:
```python
one_day_ago = datetime.datetime.now() - datetime.timedelta(days=3)
# 连接 MongoDB 数据库
mongo_client = pymongo.MongoClient('mongodb://localhost:27017/')
mongo_db = mongo_client['testdb']
# 查询 MongoDB 中的数据
result = mongo_db.user_collection.aggregate([
{
"$lookup": {
"from": "payCondition",
"localField": "i_ui_identifier",
"foreignField": "userId",
"as": "nvc_user_name"
}
},
{
"$match": {
"nvc_user_name.addtime": {"$gt": one_day_ago}
}
}
])
print(list(result))
# 连接 MySQL 数据库
mysql_conn = mysql.connector.connect(
host='172.16.2.246',
port='33060',
user='root',
password='8ach4b6f9c',
database='testdata_analyse'
)
mysql_cursor = mysql_conn.cursor()
# 插入数据到 MySQL 数据库
for row in result:
var_title = row[0],
var_type_name = row[1],
var_company_name = row[2],
var_source = row[3],
var_succees_cause = row[4],
is_succeed = row[5],
dt_add_time = row[6],
var_user_name = row[7]
mysql_cursor.execute("""
INSERT INTO t_wuliu_information_pay_statistic
VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
""", (
var_title, var_type_name, var_company_name, var_source,
var_succees_cause, is_succeed, dt_add_time, var_user_name
))
mysql_conn.commit()
```
阅读全文