Установить пользовательский индекс в mongodb с помощью pymongo или _id - PullRequest
0 голосов
/ 28 сентября 2019

Мне нужно указать пользовательский индекс для моей коллекции, который я сделал с помощью этой функции:

def insert_post_mongo (df):
    if db.rss_crawler.estimated_document_count() == 0:
        db.rss_crawler.create_index([("url_hashed", pymongo.HASHED)])
    db.rss_crawler.insert_many(df.to_dict('records'))

Мой индекс получен из URL-адреса, который я преобразую с помощью библиотеки hashlib:

posts_df['url_hashed'] = [hashlib.md5(x.encode()).hexdigest() for x in posts_df['link']]

Однако, не уверен, что это правильный путь.Моя первоначальная идея состояла в том, чтобы создать Object_Id из этого URL, но я не смог понять, как.Для Object_id требуется 12-байтовый ввод или 24-символьная шестнадцатеричная строка, и я не нашел способа сделать это.Но все же, не уверен, что это вообще необходимо, или достаточно иметь вторичный индекс.

Есть идеи?Большое спасибо!

Рауль.

Ответы [ 2 ]

1 голос
/ 29 сентября 2019

Я почти уверен, что вы хотите, чтобы что-то вроде этого оказалось в документе:

{
  _id: ObjectId("5d8fcf7632c55e3d729b5541"), // primary key; not really important for this exercise
  hashedURL: "b9056d71aca02a3a7fb860f66864fef0"  // MD5 hash of URL
}

, и вы хотите сделать быстрый поиск по этому вопросу.Создайте индекс таким образом:

db.rss_crawler.create_index( [("hashedURL", pymongo.ASCENDING) ] )

Теперь вы получите оптимизированную для индекса производительность, когда сделаете следующее:

h2 = hashlib.md5(targetURL.encode()).hexdigest()
for d in db.rss_crawler.find({"hashedURL":h2}):
    print d
1 голос
/ 28 сентября 2019

Ты слишком обдумываешь это.Просто установите _id, чтобы вы выбрали, и это будет работать.Это не должен быть ObjectId;это просто значение по умолчанию, если оно не установлено.

...