ANO = erreur sur une query #7

Closed
opened 2023-03-29 10:31:35 +02:00 by cmsassot · 2 comments
Owner

Query en question :
ordersId:string[]

	const query = {
			and: [{ in: { _id: ordersId } }],
		};
		dispatch(findOrders(query));

Erreur dans la console JS :

Error: error while querying documents in collection 'orders': sql: converting argument $2 type: unsupported type []interface {}, a slice of interface at forge.cadoles.com/arcad/edge/pkg/module.(*StoreModule).query-fm (native)

Erreur console :

2023-03-27 09:41:10.380 [DEBUG]	<document_store.go:152>	executing query	{"sessionID": "3lj311uc", "payload": {"id": 1, "jsonrpc": "2.0", "method": "findOrders", "params": {"query": {"and": [{"in": {"_id": ["01GWH3T79D0XVZ853ZBBHBH0XQ", "01GWH3VKTQC42YJYHN3VD1R5XH", "01GWH3W62VVS9R0W9H8C1648AP", "01GWH4ZYZWKWXY0S28D699VB7W", "01GWH50KPYDVGWSKTMJYY5QKBS", "01GWH546PNPJM3G8AB4GDSXEZ7", "01GWH5TWVVXMVXM342BFNVGDW5"]}}]}}}, "args": ["orders", ["01GWH3T79D0XVZ853ZBBHBH0XQ", "01GWH3VKTQC42YJYHN3VD1R5XH", "01GWH3W62VVS9R0W9H8C1648AP", "01GWH4ZYZWKWXY0S28D699VB7W", "01GWH50KPYDVGWSKTMJYY5QKBS", "01GWH546PNPJM3G8AB4GDSXEZ7", "01GWH5TWVVXMVXM342BFNVGDW5"]]} ...
  "query": SELECT id, data, created_at, updated_at 
           		FROM documents 
           		WHERE collection = $1 AND ((((EXISTS (SELECT 1 FROM json_each(json_extract(data, "$.id")) WHERE value = $2)))))
Query en question : `ordersId:string[]` ``` const query = { and: [{ in: { _id: ordersId } }], }; dispatch(findOrders(query)); ``` Erreur dans la console JS : ``` Error: error while querying documents in collection 'orders': sql: converting argument $2 type: unsupported type []interface {}, a slice of interface at forge.cadoles.com/arcad/edge/pkg/module.(*StoreModule).query-fm (native) ``` Erreur console : ``` 2023-03-27 09:41:10.380 [DEBUG] <document_store.go:152> executing query {"sessionID": "3lj311uc", "payload": {"id": 1, "jsonrpc": "2.0", "method": "findOrders", "params": {"query": {"and": [{"in": {"_id": ["01GWH3T79D0XVZ853ZBBHBH0XQ", "01GWH3VKTQC42YJYHN3VD1R5XH", "01GWH3W62VVS9R0W9H8C1648AP", "01GWH4ZYZWKWXY0S28D699VB7W", "01GWH50KPYDVGWSKTMJYY5QKBS", "01GWH546PNPJM3G8AB4GDSXEZ7", "01GWH5TWVVXMVXM342BFNVGDW5"]}}]}}}, "args": ["orders", ["01GWH3T79D0XVZ853ZBBHBH0XQ", "01GWH3VKTQC42YJYHN3VD1R5XH", "01GWH3W62VVS9R0W9H8C1648AP", "01GWH4ZYZWKWXY0S28D699VB7W", "01GWH50KPYDVGWSKTMJYY5QKBS", "01GWH546PNPJM3G8AB4GDSXEZ7", "01GWH5TWVVXMVXM342BFNVGDW5"]]} ... "query": SELECT id, data, created_at, updated_at FROM documents WHERE collection = $1 AND ((((EXISTS (SELECT 1 FROM json_each(json_extract(data, "$.id")) WHERE value = $2))))) ```
cmsassot added the
Type = Anomalie
label 2023-03-29 10:31:35 +02:00
Owner

J'ai fais quelques tests. En fait le problème vient du fait que l'opérateur in est mal nommé.

En fait, il faudrait plutôt voir l'opérateur in actuel comme un contains. Par exemple, si on a cette collection:

[
	{
  		"_id": '00001',
		"tags": ["stout", "porter"]
	},
	{
		"_id": '00002',
		"tags": ["ipa", "hazy"]
	}
]

On pourrait utiliser le filtre suivant pour récupérer l'objet 00001:

{
   "and": [
   	{ "in": { "tags": "porter" } }
   ]
}

En gros, l'opérateur in permet d'effectuer une recherche dans une propriété qui est un tableau.

J'ai fais quelques tests. En fait le problème vient du fait que l'opérateur `in` est mal nommé. En fait, il faudrait plutôt voir l'opérateur `in` actuel comme un `contains`. Par exemple, si on a cette collection: ```json [ { "_id": '00001', "tags": ["stout", "porter"] }, { "_id": '00002', "tags": ["ipa", "hazy"] } ] ``` On pourrait utiliser le filtre suivant pour récupérer l'objet `00001`: ```json { "and": [ { "in": { "tags": "porter" } } ] } ``` En gros, l'opérateur `in` permet d'effectuer une recherche dans une propriété qui est un tableau.
Owner

Pour effectuer la requête souhaitée, il vaudrait mieux faire:

const filter = { or: ordersId.map(id => ({ eq: { _id: id } })) };
Pour effectuer la requête souhaitée, il vaudrait mieux faire: ```js const filter = { or: ordersId.map(id => ({ eq: { _id: id } })) }; ```
Sign in to join this conversation.
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: arcad/edge#7
No description provided.