Я написал запрос mongodb, чтобы найти записи, чья дата начала менее 5 лет. Запрос хорошо работает в оболочке Монго.
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. Для этого я использовал библиотеку пимонго.
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 "}} вызывает ошибку.