我有一個CouchDB包含一些名爲save_data(我需要的實際數據),rel(作爲相關帳戶 - 帳戶鏈接到該文檔)和created_at(創建日期) 。 當我第一次創建我稱之爲最近項目的視圖時,我認爲該視圖中的項目按照它們的創建順序進行排序,但是我花了很長時間才發現我的錯誤。我想獲得與一個用戶的所有文件(在我的JS相對,save_profile它調用db.view funcion),然後根據created_at排序他們,所以我創建的地圖funcion:Couchdb反轉開始和結束鍵,當降序爲真
function(doc) {
if (doc.rel) {
var p = doc.save_data || {};
var r = doc.rel || {};
var q = doc.created_at || {};
emit([doc.rel], {save_data: doc.save_data, rel: doc.rel});
}
};
,然後我把它叫做與這些參數:
db.view(design + "/recent-items", {
descending : "true",
limit : 10,
update_seq : true,
key : [save_profile],
success : function(data) {
...somecode...
}
});
,然後我發現他們並沒有出現在我想要的順序,而是由他們的ID現在是有意義的排序,但是這不是我所需要的。所以我這樣做:我返工地圖功能,使得它顯示用戶和日期鍵(如字段被排序)
function(doc) {
if (doc.rel) {
var p = doc.save_data || {};
var r = doc.rel || {};
var q = doc.created_at || {};
emit([doc.rel, doc.created_at], {save_data: doc.save_data, rel: doc.rel});
}
};
,然後我用startkey代替鍵db.view這樣的:
db.view(design + "/recent-items", {
descending : "true",
limit : 10,
update_seq : true,
startkey : [save_profile, null],
success : function(data) {
...somecode...
}
});
這樣我就可以獲得所有與save_profile相關的文檔,但也按日期排序。我確實得到了它們,但是我也從其他用戶那裏獲得了它的文檔,所以這個函數是完全不可靠的。我所做的就是實現endkey,像這樣:
db.view(design + "/recent-items", {
descending : "true",
limit : 10,
update_seq : true,
startkey : [save_profile, null],
endkey : [save_profile, {}],
success : function(data) {
...somecode...
}
});
但是然後我得到空視圖的結果。 日期我用的都是這種格式:
"2013-05-13T11:59:22.281Z"
和配置文件是這樣的:
{"rand":"0.26928815129213035","nickname":"Nickname","email":"Label for Gravatar","url":"URL","gravatar_url":"http://www.gravatar.com/avatar/35838c85593335493a1fa916863fee0c.jpg?s=40&d=identicon","name":"testacc"}
我也試過更換[]和{}在開始/ endkeys與「0000-00-00T00 :00:00.000Z「和」9999-99-99T99:99:99.999Z「,但它沒有改變。那麼......任何想法?就我在其他類似問題中看到的,人們只是使用{}作爲結束鍵,並且沒有第二個參數就離開了startkey,但在這裏也不起作用。
編輯:解決! 好的人,不管你信不信,我這樣做了: 我改變了我的地圖功能,以顯示這種方式在和配置文件創建:
function(doc) {
if (doc.rel) {
var p = doc.save_data || {};
var r = doc.rel || {};
var q = doc.created_at || {};
emit([doc.rel, doc.created_at], {save_data: doc.save_data, rel: doc.rel});
}
};
,看來,如果將下降到真設置開始和結束鍵之前,你必須反向搜索區間,使endkey包含初始值和startkey containst終值,就像這樣:
db.view(design + "/recent-items", {
descending : "true",
update_seq : "true",
startkey : [save_profile.name, save_profile.rand, {}],
endkey : [save_profile.name, save_profile.rand, null],
inclusive_end : "true",
success : function(data) {
...somecode...
}
});
這奏效了,它完美的作品(但也有完全沒有的邏輯)。
嗯,這有點不可思議。 – 2013-05-14 14:56:20