2013-08-07 59 views
1

我有以下文件:簡單的SQL查詢到Couchbase

{ 
    "postId": "Message_2D73B43390041E868694A85A65E47A09D50F019C180E93BAACC454488F67A411_1375457942227", 
    "userId": "User_2D73B43390041E868694A85A65E47A09D50F019C180E93BAACC454488F67A411", 
    "post_message": "test", 
    "attachments": { 
     "images": [ 
     ], 
     "audio": [ 
     ], 
     "videos": [ 
     ] 
    }, 
    "timestamp": 1375457942227, 
    "followers": [ 
    ], 
    "follow": 0, 
    "reporters": [ 
    ], 
    "report": 0, 
    "rerayz": 0, 
    "mtype": "post" 
} 

我願做以下查詢:

SELECT * FROM posts WHERE users in ("User_1", "User_2", "User_3") ORDER_BY timestamp LIMIT 20

我做了以下我傳遞多個鍵= [ 「User_1」,「User_2」等]。但是我怎樣才能得到按時間戳排序的結果,以便首先得到20個結果呢?

function (doc, meta) { 
    if(doc.mtype == "post") { 
    emit(doc.userId, doc.post_message); 
    } 
} 

有什麼建議嗎?

謝謝。

+0

這看起來很像你以前的問題(http://stackoverflow.com/questions/18077388/filtering-posts-by-timestamp-and-userid)。你不能像你想要的那樣在Couchbase中做多個過濾器,並傳遞一個ID列表來匹配。您可能選擇了錯誤的數據庫技術來滿足您的需求。 – WiredPrairie

回答

1

我看到兩個選擇(也有可能更多):

  1. 發出時間戳,而不是用戶ID。循環查看結果,並通過使用代碼篩選出想要的用戶,而不是詢問couchbase來爲您做。循環直到您有20個匹配的記錄。

  2. 您可以發出用戶標識後跟時間戳。然後依次搜索每個用戶並抓取他們最近的20個帖子(每個)。把它們放在某種數組或結構中,並用時間戳對它們進行排序(使用代碼)。抓住陣列中的前20項(如果有3個用戶,則包含60項),並且您有所需。