我写了一个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