// find button click handler
const regNumberQuery = async(type, regNumbers, viewResult) => {
const query = {
"selector": {
"$and": [{
"type": type
},
{
"regNumber": {
"$in": regNumbers
}
}
]
},
"use_index": "type-regNumber-index"
}
// query
const result = await db.find(query);
// display results
if (result.docs.length) {
// clean up prior result
viewResult.innerHTML = '';
result.docs.forEach(doc => {
// display doc as a row
const pre = creEl('pre');
pre.innerText = ['type:', type, '\nregNumber:', doc.regNumber].join(' ');
pre.classList.add('border-bottom');
viewResult.appendChild(pre);
});
} else {
// no results
viewResult.innerHTML = '<div>No results.</div>';
}
// display the query i.e. selector.
const pre = creEl('pre');
pre.innerText = JSON.stringify(query, null, 3);
viewResult.appendChild(pre);
}
//
// boilerplate code
//
// canned test documents
const getDocsToInstall = () => {
return [{
"type": "SHIP",
"regNumber": "11"
},
{
"type": "SHIP",
"regNumber": "29"
},
{
"type": "SHIP",
"regNumber": "22"
},
{
"type": "SHIP",
"regNumber": "67"
}
]
}
// init db instance
let db;
const initDb = async() => {
// create an in-memory db
db = new PouchDB('test', {
adapter: 'memory'
});
// add test docs
await db.bulkDocs(getDocsToInstall());
// create the type/regNumber index
await db.createIndex({
index: {
fields: ['type', 'regNumber'],
ddoc: "type-regNumber-index"
}
});
}
// initialize the db then show search controls.
initDb().then(() => {
getEl(g_view_result).classList.remove('hide')
});
// conveniences
const getEl = id => document.getElementById(id);
const creEl = id => document.createElement(id);
.hide {
display: none
}
.label {
text-align: right;
margin-right: 1em;
}
.hints {
margin-left: 1em;
font-size: smaller;
}
.border-top {
border-top: 1px solid;
}
.border-bottom {
border-bottom: 1px solid;
padding: 1em 1em;
}
<script src="https://cdn.jsdelivr.net/npm/pouchdb@7.1.1/dist/pouchdb.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/pouchdb@7.1.1/dist/pouchdb.find.min.js"></script>
<script src="https://github.com/pouchdb/pouchdb/releases/download/7.1.1/pouchdb.memory.min.js"></script>
<table id='view' class=''>
<tr>
<td>
<input id='regNumbersCSV' type='text' value='11,29,22,67' />
<label class='hints' for='regNumbersCSV'>regNumbers (e.g. 11,29,22,67)</label>
<div>
<input id='type' type='text' value='SHIP' />
<label class='hints' for='type'>Type (e.g. SHIP)</label>
<div style='margin-top:1em'>
<button onclick="regNumberQuery(
getEl('type').value.trim(),
getEl('regNumbersCSV').value.split(',').map(n => n.trim()),
getEl('viewResult'))">Find</button>
</td>
</tr>
</table>
<div style='margin-top:2em'></div>
<div id='viewResult' class='border-top'>
</div>