Open PraveenKumarPalai opened 2 years ago
Looked up the code:
Here are my observations:
Looked up the umongo library code, looks like we are using a recursive filed mapper, and the default name of primaryKey ( _id
), is put as id
. Hence this matches our type and converts every id (not embedded fields) to _id
, Hence due to filed mismatch we don't get back the data.
Removing the below snippet returns data as we are not fetching the matching attribute anymore.
(Updated logic)
(Existing logic with some logs (added by me))
But looks like the problem can have a permanent solution by naming the _id filed as _id only (in the library implementation) and not id.
This is the issue that I am facing:
ResultsModel.find_one({ 'order.customer.id': customer_id, 'order_source': order_source, })
returns None
Whereas,
ResultsModel.find_one({ 'order.customer.customer_id': customer_id, 'order_source': order_source, })
(using customer_id instead of id (same value)) works - returns DataOr
ResultsModel.find_one({ 'order.customer.email': customer_email, 'order_source': order_source, })
returns Data
Here,
order.customer.id
is of typeint
and order is of type fields.DictField()Note: Creating Embedded Docs. work, but in my case orders is a complex nested structure and it may have varying structures so cannot fix the schema. Hence using
fields.DictField()
instead offields.EmbeddedField()