2017-01-09 3 views
0

Как вы получаете объекты, у которых в них нет определенного поля?

function setup() { 
 
\t myRequest = indexedDB.deleteDatabase('myDatabase') 
 
\t myRequest.onsuccess \t = function() { 
 
\t \t var myRequest 
 
\t \t 
 
\t \t myRequest = indexedDB.open('myDatabase') 
 
\t \t myRequest.onupgradeneeded = function(response) { 
 
\t \t \t var myDatabase 
 
\t \t \t \t ,myObjectStore 
 
\t \t \t 
 
\t \t \t myDatabase = response.target.result 
 
\t \t \t myObjectStore = myDatabase.createObjectStore('myData',{autoIncrement:true}) 
 
\t \t \t myObjectStore.createIndex('myIndex', 'field2') 
 
\t \t } 
 
\t \t myRequest.onerror = function(response) { 
 
\t \t \t debugger 
 
\t \t } 
 
\t \t myRequest.onsuccess = function(response) { 
 
\t \t \t var myTransaction 
 
\t \t \t \t ,myObjectStore 
 
\t \t \t \t ,myRequest 
 
\t \t \t \t ,obj = {} 
 
\t \t \t window.myDatabase = response.target.result 
 
\t \t \t myTransaction = myDatabase.transaction(['myData'],'readwrite') 
 
\t \t \t myObjectStore = myTransaction.objectStore('myData') 
 
\t \t \t obj.field1 = 'a' 
 
\t \t \t obj.field2 = 'b' 
 
\t \t \t myObjectStore.add(obj) 
 
\t \t \t obj = {} 
 
\t \t \t obj.field1 = 'c' 
 
\t \t \t myObjectStore.add(obj) 
 
\t \t } 
 
\t } 
 
} 
 
setup() 
 

 
function myFunction() { 
 
\t var myTransaction = myDatabase.transaction(['myData']) 
 
\t var myObjectStore = myTransaction.objectStore('myData') 
 
\t var myIndex = myObjectStore.index('myIndex') 
 
\t // The following line is where I need help: 
 
\t var myRange = IDBKeyRange.only(null) 
 
\t // I'm trying to get the objects where field2 doesn't exist. 
 
\t var myRequest = myIndex.openCursor(myRange) 
 
\t myRequest.onsuccess = function(response) { 
 
\t \t result = response.target.result 
 
\t \t if (result) { 
 
\t \t \t console.log(result) 
 
\t \t \t result.continue() 
 
\t \t } 
 
\t } 
 
\t 
 
} 
 
</script>
<a href="javaScript:myFunction();">click here</a>

ответ

2

Вы не можете сделать это простым способом. Невозможно запросить отсутствующие/пустые поля.

Однако вы можете быть умными и обходиться вокруг этого.

  1. Прежде чем хранить объект в хранилище объектов, проверьте, пусто ли свойство объекта (null/undefined/empty string/etc). Если поле отсутствует, установите для отдельного поля, например «otherPropertyIsMissing» значение. Я предлагаю использовать пустую строку ('') или 0. Если свойство отсутствует, удалите свойство otherPropertyIsMissing.
  2. Добавьте индекс в хранилище объектов в onupgradeneeded методе свойства otherPropertyIsMissing. Например, назовите его «indexOnOtherPropertyIsMissing».
  3. Запрос на индекс 'indexOnOtherPropertyIsMissing' для всех объектов. Этот запрос будет возвращать только те объекты, где свойство indexOnOtherPropertyIsMissing отсутствует. Этот набор объектов - это все объекты, в которых отсутствует другое свойство.
+0

Ну, я полагаю, я могу дать ему начальное значение нуля вместо того, чтобы просто оставить его вне стола. Спасибо Джошу. –

 Смежные вопросы

  • Нет связанных вопросов^_^