在python函数中返回mongo搜索结果

2024-09-26 22:52:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了以下函数,在使用pymongo包在mongo中运行搜索后,花一段时间将结果返回到主程序:

def searchMsgByDate (mycol,option):
    dt = date.today()
    if option == "today":
        start = datetime.combine(dt, datetime.min.time())
         end = datetime.combine(dt, datetime.max.time())
    elif option == "yesterday":
        start = datetime.combine(dt, datetime.min.time()) - timedelta(days=1)
        end = datetime.combine(dt, datetime.max.time()) - timedelta(days=1)
    elif option == "week":
        start = datetime.combine( dt - timedelta(days=dt.weekday()), datetime.min.time())
        end = datetime.combine(dt, datetime.max.time())
    elif option == "month":
        start = datetime.combine( dt - relativedelta(day=1) , datetime.min.time())
        end = datetime.combine(dt, datetime.max.time())
    elif option == "year":
        start = datetime.combine( dt - relativedelta(month=1,day=1) , datetime.min.time())
        end = datetime.combine(dt, datetime.max.time())
    elif option == "forever":
        start = datetime.combine( date(1970, 1, 1) , datetime.min.time())
        end = datetime.combine(dt, datetime.max.time())
    else:
        print("Invalid option for searchMsgMain; exiting")

    result = mycol.find({"msg_date": { "$gte": start, "$lt": end}});
    record_count = 0
    for entry in result:
        record_count = record_count + 1
    if record_count > 0:
        print ("Records found =", record_count)
    else:
        print ("No records found")
    return result

以下是调用函数的主程序:

out = searchMsgByDate(mycol)
for entry in out:
   ....
   ....

当我这样做的时候,我在主程序中什么也没有发生。我可以在函数中确认搜索结果并给出90多条记录

我想我在归还这类物品方面有问题,否则这是不可能的。我能够成功地返回简单的值。你知道吗

有什么想法我都很感激。你知道吗


Tags: datetimedatetimecountdtminrecordstart
2条回答

我将结果写入一个数组,并将其作为函数返回返回。效果很好。你知道吗

mongo_query = mycol.find({"msg_date": { "$gte": start, "$lt": end}});
record_count = 0
result = []
for entry in mongo_query:
    result.append(entry)
    record_count = record_count + 1
if record_count == 0:
    print ("No records found")
return result

1)您不必通过遍历游标元素自行执行计数。你可以打电话给db.collection.find数据库({}).count()方法。文档可以在here中找到

2)我不确定myCol是什么,但它应该是一个MongoClient.database\u名称对象。例如,请考虑以下代码段:

from pymongo import MongoClient

class Events:
    def __init__(self):
        self.client = MongoClient('localhost', 27017)
        self.database = self.client.KKNY

    def retrieveEvents(self):
        event_names = self.database['event_names']
        return event_names.find({})

如您所见,我初始化了MongoClient,本例中的数据库名是KKNY。从这一点上说,我可以通过运行self.database['event_names']来访问这个数据库中的集合。你知道吗

3)也请包括版本,你正在使用的Pymango从现在起,它将使我们的生活更轻松

相关问题 更多 >

    热门问题