API Get метод для получения всех твитов с количеством хэштегов больше, чем в MongoDB в формате JSON - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть база данных MongoDB, которая содержит несколько твитов.Я хочу, чтобы через мой API можно было получать все твиты в списке JSON, которые содержат количество хэштегов, превышающее заданное пользователем в URL-адресе (например, http://localhost:5000/tweets?morethan=5,, что в данном случае равно 5).

Хэштеги содержатся внутри столбца сущностей в базе данных, наряду с другими столбцами, такими как user_mentions, urls, символы и медиа.Вот код, который я написал до сих пор, но ничего не возвращает.

#!flask/bin/python

app = Flask(__name__)

@app.route('/tweets', methods=['GET'])
def get_tweets():
# Connect to database and pull back collections

db = client['mongo']
collection = db['collection']

parameter = request.args.get('morethan')

if parameter:
    gt_parameter = int(parameter) + 1  # question said greater than not greater or equal
    key_im_looking_for = "entities.hashtags.{}".format(gt_parameter)  # create the namespace#
    cursor = collection.find({key_im_looking_for: {"$exists": True}})

РЕДАКТИРОВАТЬ: ЭТО РАБОТАЕТ!

1 Ответ

0 голосов
/ 27 ноября 2018

Код, о котором идет речь, это строка

cursor = collection.find({"entities": {"hashtags": parameter}})

Этот ответ объясняет, почему невозможно напрямую выполнить то, что вы просите.

запрос mongodb: $ size с $ gtвсегда возвращает 0

Этот ответ также описывает потенциальные (но плохие) идеи, чтобы обойти его.

Лучшее предложение - изменить все ваши документы и вставить ключ "num_hashtags" вгде-то индексировать его и выполнить запрос к нему.

Используя API JSON Twitter , вы можете обновить все свои документы и вставить ключ num_hashtags в документ сущностей.

В качестве альтернативы, вы могли бы решить вашу непосредственную проблему, выполнив очень медленное сканирование полной таблицы по всем документам для каждого запроса , проверяя, существует ли номер хештега, который на один больше вашего параметра, путем злоупотребления Точка нотации MongoDB .

gt_parameter = int(parameter) + 1  # question said greater than not greater or equal
key_im_looking_for = "entities.hashtags.{}".format(gt_parameter)  #create the namespace# 
# py2.7 => key_im_looking_for = "entities.hashtags.%s" %(gt_parameter) 
# in this example it would be "entities.hashtags.6"
cursor = collection.find({key_im_looking_for: {"$exists": True}})

Ответ best (и основная причина использования базы данных NoSQL в первую очередь) заключается в том, что вы должны изменить свои данные в соответствии со своим поиском.Если возможно, вы должны выполнить обновление на месте, добавив ключ num_hashtags.

...