0

2 つのキーを含むソファベース ビューをクエリするにはどうすればよいですか。最初の NSNumber タイプ (以下の例では created と呼ばれます) と NSString タイプ (username と呼ばれます)。

CBLView* view = [database viewNamed:@"by_username"];
if (!view.mapBlock)
{
    [view setMapBlock: MAPBLOCK({
        if ( [doc[@"type"] isEqualToString:@"user"] )
        {
            emit(@[doc[@"created"],doc[@"username"]], nil);
        };
    }) version: @"2"];
}

CBLQuery* q = [view createQuery];
q.keys = @[ @[ @{}, @"john" ] ];
// run query

上記のクエリでは、doc[@"username"] == @"john" を持つすべてのドキュメントが、doc[@"created"] の値に関係なく一致することを期待しています (つまり、@{ } はワイルドカードと同等です)。

ただし、ユーザー名が @"john" のドキュメントが多数存在するにもかかわらず、クエリは 0 件の一致を返します。私は何か間違ったことをしているに違いないので、どんな洞察も大歓迎です!

4

2 に答える 2

1

逆方向に検索しようとしているようです。インデックスは、検索する最初の項目で編成する必要があります。したがって、気にしない場合はcreated、インデックスから削除する必要があります。これにより、ここで発生した問題が発生するためです。他のクエリでこれが必要になる可能性があることを理解して、この変更で新しいビューを作成してください。

また、回答に関する一般的な注意として、ドキュメント全体をインデックスに出力することはまったく役に立ちません。これにより、ストレージのサイズが 2 倍になり、ビュー フレームワークの操作が非効率になります。

于 2015-01-22T12:41:43.577 に答える