我有一个CouchDB文档,我希望按"date"
排序:
{
"_id": "accounts",
"accounts": [
{
"name": "_name.1",
"date": 1524336565172
},
{
"name": "_name.2",
"date": 1524336565173
},
{
"name": "_name.3",
"date": 1524336565171
}
}
现在我正在使用以下PouchDB,它填充<ul>
,但显然不是正确的顺序:
localDB.get('accounts').then(function(result){
$.each(result.accounts, function(i, value) {
$('ul').append('<li data-date="' + value.date + '">' + value.name + '</li>');
});
});
我正在寻找的输出是:
<li data-date="1524336565171">_name.3</li>
<li data-date="1524336565172">_name.1</li>
<li data-date="1524336565173">_name.2</li>
提前致谢! :)
答案 0 :(得分:1)
如果您有多个文档并且打算根据文档字段对文档进行排序,那么CouchDB索引会起作用。您有一个单个文档,因此您无法使用CouchDB索引,您必须对代码逻辑中的字段进行排序。
拥有多个文档可能更实际,而不是将所有数据保存在一个文档中。
您可以将单个文档拆分为多个文档,如下所示:
{
"_id": "account 001",
"name": "_name.1",
"date": 1524336565172
}
{
"_id": "account 002",
"name": "_name.2",
"date": 1524336565173
}
{
"_id": "account 003",
"name": "_name.3",
"date": 1524336565171
}
然后你可以在CouchDB中创建一个视图函数,并获取由date
字段索引/排序的文档,如下所示:
function (doc) {
if(doc.date && doc.name){
emit(doc.date, doc.name);
}
}
可以使用PouchDB创建上述视图。您可以使用Map/reduce queries,也可以使用 Mango queries。
答案 1 :(得分:1)
虽然@ user3405291的答案通常被视为更好的做法,但您也可以保留现有的文档结构并从单个帐户文档中创建view:
function (doc) {
if(doc.accounts) {
doc.accounts.forEach(function(account) {
emit(account.date, account.name);
});
}
}
对于存储帐户,我强烈建议按照其他答案的建议使用每个帐户的文档。它可以更容易扩展,因为可以独立更新/删除帐户。