@andreas-jung benar dalam ensure_index() adalah pembungkus create_index() , saya pikir kebingungan muncul dengan frasa:
Saat indeks dibuat (atau dipastikan) oleh PyMongo, indeks itu "diingat" selama ttldetik.
Bukan karena indeks bersifat sementara atau "sementara", yang terjadi adalah selama jumlah detik yang ditentukan, panggilan ke ensure_index() mencoba membuat indeks yang sama lagi tidak memiliki efek apa pun dan tidak panggil create_index() di bawahnya, tetapi setelah "cache" itu kedaluwarsa, panggilan ke ensure_index() akan panggil lagi create_index() di bawahnya.
Saya sangat memahami kebingungan Anda karena sejujurnya dokumen PyMongo tidak menjelaskan cara kerjanya dengan baik, tetapi jika Anda menuju ke dokumen Ruby, penjelasannya sedikit lebih jelas:
- (String) sure_index(spec, opts ={})
Memanggil create_index dan menyetel tanda untuk tidak melakukannya lagi selama X menit lagi. Kali ini dapat ditetapkan sebagai opsi saat menginisialisasi objek Mongo::DB sebagai opsi[:cache_time] Perubahan apa pun pada indeks akan disebarkan melalui terlepas dari waktu cache (mis. perubahan arah indeks)
Parameter dan opsi untuk metode ini sama dengan parameter untukCollection#create_index.
Contoh:
Call sequence:
Time t: @posts.ensure_index([['subject', Mongo::ASCENDING]) -- calls create_index and sets the 5 minute cache
Time t+2min : @posts.ensure_index([['subject', Mongo::ASCENDING]) -- doesn't do anything
Time t+3min : @posts.ensure_index([['something_else', Mongo::ASCENDING]) -- calls create_index and sets 5 minute cache
Time t+10min : @posts.ensure_index([['subject', Mongo::ASCENDING]) -- calls create_index and resets the 5 minute counter
Saya tidak mengklaim driver bekerja persis sama, hanya saja untuk tujuan ilustrasi penjelasan mereka sedikit lebih baik IMHO.