documentdb icon indicating copy to clipboard operation
documentdb copied to clipboard

Query sub array

Open kaliazur opened this issue 5 years ago • 1 comments

Hi !

I am trying to execute a query on a subdocument and I didn't manage to make it work .....

My CosmosDB documents are like that:

{
[...]
"references": [
   {
      "id": "1234",
      "link": "http://site.com/1234"
   },
   {
      "id": "5678",
      "link": "http://site.com/5678"
   }
]

The query I tried is this one: SELECT * FROM r WHERE ARRAY_CONTAINS(r.references, {id:'1234'}, true) ( note that the third 'true' parameter to ARRAY_CONTAINS() is to say "the provided object is incomplete" ) With this request, I have this error: panic: BadRequest, Cross partition query is required but disabled. Please set x-ms-documentdb-query-enablecrosspartition to true, specify x-ms-documentdb-partitionkey, or revise your query to avoid this exception.

Next I tried to use QueryDocument with Partition like that:

partitionKey := func(reqOpts *documentdb.RequestOptions) {
	reqOpts.PartitionKey = []string{"/internal_id"}
}

query := fmt.Sprintf("SELECT * FROM r WHERE ARRAY_CONTAINS(r.references, {id:'1234'}, true)")

var ObjFound []Obj

err = client.QueryDocumentsWithRequestOptions(coll.Self, query, &ObjFound, partitionKey)
if err != nil {
	panic(err)
}

With that, I don't have any error, but I am not finding any documents ...

Moreover, this request works fine in the Azure Data Explorer from the web interface.

Did someone manage to make that kind of request work ?

Thank you !

kaliazur avatar Aug 21 '18 06:08 kaliazur

Isn't it just because of you misunderstand PartitionKey option ? Try to set reqOpts.PartitionKey to real value. I believe it should contain value that will be used for partition number calculation. Not a path to value since you are not providing it in request. Docdb gateway can decide which partition it should use.

pavelsmejkal avatar Nov 13 '18 10:11 pavelsmejkal