2016-04-06 24 views
0

我有一個包含多個文檔的數據庫。每個文檔都有一個user_id字段。 假設這些文檔屬於兩個用戶:1和2. 我想爲每個用戶提取一個最新的文檔。我應該如何實現搜索索引? 我現在可以通過使用user_id獲得用戶的所有文檔:1 但是,如何在一個查詢中將每個用戶的文檔編號限制爲一個?在Cloudant上搜索每個用戶的一個文檔

回答

0

假設你有每個文檔的日期屬性,你可以做到這一點,如下所示:

創建以下指標:

{ 
    "index": { 
     "fields": [ 
     {"user_id":"desc"}, 
     {"date_field":"desc"} 
     ] 
    }, 
    "type": "json" 
} 

要查詢最新的文檔爲user_id ==「1」的查詢應該是這樣的:

{ 
    "selector": { 
     "user_id": "1" 
    }, 
    "fields": [ 
     "_id", 
     "user_id", 
     "date_field" 
    ], 
    "sort": [ 
     { "user_id": "desc" }, 
     { "date_field": "desc" } 
    ], 
    "limit":1 
} 

如果你想在一個查詢返回多個用戶,那麼你就必須做這樣的事情:

  1. 添加一個名爲latest或類似
  2. 財產上user_idlatest添加一個索引:

    { 
        "index": { 
         "fields": [ 
         "user_id", 
         "latest" 
         ] 
        }, 
        "type": "json" 
    } 
    
  3. 只要添加一個新的文檔找到該user_id其中latest是真實的文件:

    { 
        "selector": { 
         "user_id": "1", 
         "latest" : true 
        }, 
        "fields": [ 
         "_id", 
         "user_id", 
         "latest" 
        ] 
    } 
    
  4. 設置latest關於該文件的

  5. 將隨新文檔=假latest =真
  6. 此查詢可以找到所有用戶提供最新的DOC:

    { 
        "selector": { 
         "user_id": {"$gt":null}, 
         "latest" : true 
        }, 
        "fields": [ 
         "_id", 
         "user_id", 
         "latest" 
        ] 
    }