I have a document structure like below
[ { "id": "1", "author": "John Smith", "partNames": [ "PART.5", "PART.10", "PART.15", "PART.30", "PART.31" ] ... }, { "id": "2", "author": "Mike Smith", "partNames": [ "PART.4", "PART.6", "PART.17", "PART.18", "PART.20" ] ... } ]
and I try to implement searching for user by fields author and partNames, so user can do query like
SELECT * FROM c WHERE CONTAINS(c.author, 'John')
and user will get in result the id=1
document because the name of author was John
.
The next step is to allow user ask for document by parts, so for example I want to receive a document where PART.4
exists, so the query will be
SELECT * FROM c WHERE ARRAY_CONTAINS(c.partNames, 'PART.4', true)
and it returns document id=2
.
Going further I’d like to make query that allows user to type just PART.1
and he will receive documents id=1
and id=2
because both have parts starting with PART.1
So is there a way to achieve it?
Advertisement
Answer
Please test below sql:
SELECT distinct value c FROM c join p in c.partNames where STARTSWITH(p, "PART.1")
Results:
Updates:
Op changed a little bit array because instead of [part.1, part2...]
items and made another structure like [ {part: part.1}, {part: part.2} ... ]
and managed to do query using user defined function similar to described here DocumentDB SQL with ARRAY_CONTAINS and it works fine.