如何将基于 mongodb 的查询转换为基于 python 的 pymongo 脚本



我写了一个mongodb查询来查找开始日期少于5年的记录。该查询在 mongo shell 中运行良好。

db.userdetails.aggregate( [ {"$match":{"appid":"58d21f30d2a57d0ec807e012", "data.begin_date":{"$exists":"true"}}},
{ "$project": { "gender":"$data.gender", "birth_date":"$data.birth_date", 
    "membership_type":"$data.membership_type", "postal":"$data.postal", "begin_date":"$data.begin_date", 
    "begin_year":{"$year": "$data.begin_date"} } },
   { "$match": {"begin_year": {"$gt": new Date().getFullYear()-5}} } ] )

现在我想编写这个查询以从 python 执行。我为此使用了pymongo库。

pipeline = [{"$match":{"appid":"58d21f30d2a57d0ec807e012", "data.begin_date":{"$exists":"true"}}},
            {"$project":{"gender":"$data.gender", "birth_date":"$data.birth_date",
                         "membership_type":"$data.membership_type", "postal":"$data.postal",
                         "begin_date":"$data.begin_date", "begin_year":{"$year": "$data.begin_date"} } },
            {"$match": {"begin_year": {"$gt": datetime.now().year-5}}}]

从蟒蛇-

collection_userdetails.aggregate(pipeline)

代码显示错误

**pymongo.errors.OperationFailure: can't convert from BSON type string to Date**

我尝试逐部分执行查询,并在分析后begin_year":{"$year":"$data.begin_date"} } 导致错误。

似乎至少有一个文档将$data.begin_date字段作为字符串,而不是日期。

尝试类似这样的操作:

   db.userdetails.find({"data.begin_date":{$type:2}})

查找字符串类型的文档 data.begin_date

最新更新