#python #mongodb #mongodb-query #pymongo
#python #mongodb #mongodb-запрос #pymongo
Вопрос:
Что не так с этим кодом?
File "<ipython-input-17-728073f2f109>", line 17
{"$toInt" : 'page_start'}]}}},
^
SyntaxError: invalid syntax
Есть идеи, что это значит?
import pandas as pd
def length_vs_references(articles):
res = {"1-5" : 0, "6-10" : 0, "11-15" : 0, "16-20" : 0, "21-25" : 0, "25-30" : 0, ">30" :0}
n = {"1-5" : 0, "6-10" : 0, "11-15" : 0, "16-20" : 0, "21-25" : 0, "25-30" : 0, ">30" :0}
cursor = articles.aggregate([
{'$match': {'$and' : [{'references': {'$exists': False}
}, {'$ne':['$page_end', '']}, {'$ne':['$page_start', '']} ]}},
{'$project': {'len_refernces': {"$size": '$references'},
'pages': {'$subtract': [{"$toInt": 'page_end'},
{"$toInt" : 'page_start'}]}}},
{'$bucket' :{
'$groupBy': '$pages',
'boundaries': [ 0, 6, 11, 16, 21, 26, 31, 1000000],
'default': 'Other',
'key': {
'output': {"average": {"$avg" : '$len_references'}},
}
}
}
])
return cursor
print(length_vs_references(articles))
Комментарии:
1. Я не собираюсь пытаться считать, но, скорее всего, вам не хватает скобки или их слишком много. Убедитесь, что все они совпадают
Ответ №1:
Вы пропустили и добавили некоторые $
. Логические значения true/false
.
Должно быть это:
articles.aggregate([
{
'$match': {
'references': { '$exists': false },
'page_end': { '$ne': '' },
'page_start': { '$ne': '' }
}
},
{
'$project': {
'len_refernces': { "$size": '$references' },
'pages': {
'$subtract': [
{ "$toInt": '$page_end' },
{ "$toInt": '$page_start' }
]
}
}
},
{
'$bucket': {
'groupBy': '$pages',
'boundaries': [0, 6, 11, 16, 21, 26, 31, 1000000],
'default': 'Other',
'output': {
"average": { "$avg": '$len_references' }
},
}
}
])
Комментарии:
1. Привет, спасибо. Я внес изменения в свой код в соответствии с приведенным выше и теперь получаю OperationFailure: аргумент для $size должен быть массивом, но имел тип: отсутствует, полная ошибка: {‘ok’: 0.0, ‘errmsg’: ‘Аргумент для $size должен быть массивом, но имел тип: отсутствует’, ‘код’: 17124, ‘Кодовое имя’: ‘Location17124’}. Есть идеи?
2. Ошибка совершенно очевидна, поле
references
должно быть массивом. Вы не показываете никаких исходных данных, поэтому мы не можем помочь.3. На самом деле конвейер агрегации бесполезен. Вы сопоставляете дальше
references: { '$exists': false }
, то есть выбираете только документы, которыхreferences
не существует, но позже пытаетесь получить длину этого поля.