Luke Baughan
Luke Baughan

Reputation: 4686

DocumentDB LAMBDA SqlMethod.Like and .Contains NotImplemented Exception

Im trying to do a simple "LIKE" query using a LAMBDA expression using CreateDocumentQuery; however after trying .Contains and SqlMethod.Like and both times receiving the response NotImplementedException I don't know what to try next!

Upvotes: 4

Views: 1612

Answers (2)

Andrew Liu
Andrew Liu

Reputation: 8119

Update: As of 5/6/15, DocumentDB added a set of String functions including STARTSWITH, ENDSWITH, and CONTAINS. Please note that most of these functions do not run on the index and will force a scan.

LIKE and CONTAINS are not yet supported in DocumentDB.

You'll want to check out the DocumentDB feedback page and vote on features (e.g. LIKE and CONTAINS) to get your voice heard!

Upvotes: 3

Luke Baughan
Luke Baughan

Reputation: 4686

Because I only needed to search against a discreet subset of properties of the larger object I implemented a .Contains search function as below. It works as expected though I have no idea regarding performance or scalability.

Domain Models

public interface ITaxonomySearchable
{
    string Name { get; set; }
    string Description { get; set; }
}

public class TaxonomySearchInfo : ITaxonomySearchable {
    [JsonProperty(PropertyName = "id")]
    public Guid Id { get; set; }
    [JsonProperty(PropertyName = "name")]
    public string Name { get; set; }
    [JsonProperty(PropertyName = "description")]
    public string Description { get; set; }
}

public class TaxonomyContainer : ITaxonomySearchable
{
    [JsonProperty(PropertyName = "id")]
    public Guid Id { get; set; }
    [JsonProperty(PropertyName = "userId")]
    public string UserId { get; set; }
    [JsonProperty(PropertyName = "name")]
    public string Name { get; set; }
    [JsonProperty(PropertyName = "description")]
    public string Description { get; set; }
    [JsonProperty(PropertyName = "tags")]
    public string[] Tags { get; set; }
    [JsonProperty(PropertyName = "taxonomy")]
    public Node[] Taxonomy { get; set; }
}

Search method

public async static Task<List<TaxonomySearchInfo>> Search(string searchTerm)
{
    var db = GetJsonDocumentDb.GetDb();
    using (var client = GetJsonDocumentDb.GetClient())
    {
        var documentCollection = await GetJsonDocumentDb.GetDocumentCollection(db, client, "TaxonomyContainerCollection");
        return client.CreateDocumentQuery<TaxonomySearchInfo>(documentCollection.DocumentsLink)
            .AsEnumerable()
            .Where(r => r.Name.Contains(searchTerm) || r.Description.Contains(searchTerm))
            .ToList();
    }
}

Upvotes: 0

Related Questions