こんにちは、私は次のフィールドでCloudantドキュメントを持っていると仮定すると、次のユースケースを持っている:Cloudant検索インデックスの選択クエリ
{
public: false, // Visibility of the doc
permissions: [1,2,3] // List of user IDs that are allowed view access to the doc
}
(許可フィールドに記載されているように)だけが特権ユーザーがそれにアクセスを持っていますか、 public(public:true)の場合、すべてのユーザーがアクセスできます。
私の問題は、現在のユーザーがアクセスできるすべてのドキュメントを検索するための検索インデックスを作成しようとしているときに発生します。
function (doc) {
if (!doc.public) {
doc.permissions.forEach(function(entry) {
index("user_id", parseInt(entry));
});
} else {
index("user_id", ???); // If its public document, how should I index it?
}
}
それはfalseに公共のセットを持っていますが、私の検索インデックスをtrueに公共のセットでそれらの文書を返すことに失敗したドキュメントに適しています:私の検索インデックスは次のようになります。私の検索クエリは次のようになります:
q=user_id:1
私は実際にコントローラレイヤーではなく、これをCloudantレイヤーに実装する必要があるので、どのような提案もあります。
提案をいただきありがとうございます。私はこの目的のためにビューを使用する場合、タイムスタンプなどのソート機能をどのように統合するのですか? – Lee
このキーでは、キー配列を発行できます。例:emit(['*'、(new Date())。getTime()]);次に、ソートを制御するには、* descending *クエリパラメータを使用する必要があります。通常、私が間違っている場合は私を修正し、それは最初のキーと秒の両方を並べ替えます。最後に、主キー(ドキュメントID)を最初にソートします。次に、同じキーを持つすべてのドキュメントについて、2番目のキー(タイムスタンプ)をソートする必要があります。 –