2016-04-01 13 views
0

EndekslenmişDB'nin bulunamıyor veya MongoDB'nin yaptığı gibi işlevleri bulup bulmuyorum, ancak gerçekleştirmek istediklerim bu işlevlere benziyor.bul ve bul EndekslenmişDB'de

DizinlenmişDB'de bir veri depom var. stop_id'u kullanarak mağazada bir dizin oluşturdum.

Mağazada stop_id numaralı tüm belgeleri bulmak istiyorum. Birden çok nesne bir stop_id değerine sahip olabilir.

Ben Ne:

I (daha iyi bir yol varsa düzelt lütfen)

// this function is called from html via angularjs 
    $scope.findOne = function(stop_id) { 
     var db; 
     var request = indexedDB.open("Trans"); 
     request.onerror = function(event) { 
      alert("Couldn't connect to Database"); 
     }; 
     request.onsuccess = function(event) { 
      db = event.target.result; 
      var objectStore = db.transaction("times").objectStore("times"); 
      var index = objectStore.index("stop_id"); 

      var range = IDBKeyRange.only(stop_id); 

      // call something here to retrieve 
      // One or All documents with the ID of stop_id 
      // passed in from the html 
     } 
    } 

Sonra şekilde html aramak isteyeyim biraz hile çalışıyorum:

<div class="medium-6 columns" ng-repeat="stops in objects | orderBy: 'stop_name'"> 
     <div class="card hoverable"> 
      <div class="content"> 
       <span class="title">{{stops.stop_name}}</span><small class="float-right">{{stops.stop_id}}</small> 
       <!-- this function will search another object store, then retrieve all documents matching the stop_id --> 
       {{ findOne(stops.stop_id)}}</p> 
      </div> 
     </div> 
    </div> 

Yukarıdaki yaklaşımı göz önünde bulunduracağım, çünkü indexedDB yerel olarak birleştirmeyi desteklemiyor ve yerel dizinli geçici çözümler kullanmak isteyeceğim anında başka bir veri mağazasındaki bir kimlikle ilgili ek verileri almak için. Performans bir endişe değil. Her iki Veri deposu da 150'den fazla ürün içermez.

cevap

0

IDBIndex get veya openCursor yöntemini kullanın. mağazada birden fazla nesne stop_id aynı olması durumunda

// for one 
var range = IDBKeyRange.only(myId); 
var getRequest = index.get(range); 
getRequest.onsuccess = function(event) { 
    var result = event.target.result; 
    console.log(result); 
}; 

// for multiple ... 
var getRequest = index.openCursor(range); 
var documentsFound = []; 
getRequest.onsuccess = function(event) { 
    var request = event.target; 
    var cursor = request.result; 
    if(!cursor) { 
    console.log('no match found, or no more matches found'); 
    someFunction(documentsFound); 
    } else { 
    console.log('Found:', cursor.value); 
    documentsFound.push(cursor.value); 
    cursor.advance(); 
    } 
}; 

, sonra onupgradeneeded işleyicisindeki endeksi oluştururken bir unique:true bayrağı kullanılmadığından emin olun.

+0

Teşekkürler. Bir deneyecek. Ve evet, benzersiz bir tane yaratmadım: Onlarda gerçek bir indeks – Rexford

+0

Beklediğim gibi çalışmıyor. Konsolda tekrarlayan pek çok sonuç elde edemiyorum. Başlangıçtan, bir sorgunun birden çok nesneyle sonuçlanıp sonuçlanmayacağını bilmiyorum, bu yüzden yukarıdaki birden fazla seçeneğe gittim. Muhtemelen doğru bir şey yapmıyorum. Bu tüm indexeddb şeyi elde etmeme yardımcı olmak için daha fazla açıklama takdir edecek. – Rexford

+0

Yukarıdaki birden çok kaydı yineleyen bölüm, aynı nesneyi hiçbir zaman iki kez döndürmez, ancak benzer görünen nesneleri döndürme olasılığı vardır. Sadece verilen stop_id parametresi ile tüm nesneleri listeler. Eşleşen durakları bir diziye sürükleme örneği gösterdim. Belki de aramalar ya da bunun gibi bir şey arasındaki diziyi sıfırlamıyor olabilirsiniz? – Josh