Animesh,
Overall, your query follows a good pattern because it depends primarily on an equality comparison against an index (IndexedField1). However, if there are many thousands of documents with IndexedField1 = "foo", your query may run slowly or even timeout. If there are fewer documents with IndexedField2 = "bar" than IndexedField1 = "foo", then put the IndexedField2 comparison first in the WHERE clause. QLDB may try to use both indexes, but the left-most one is the most important.
Besides performance, the other problem you might run into if there are a lot of documents to scan through after the index hit is OCC exceptions. If another process inserts/updates/deletes a document with an IndexedField1 value of "foo" or an IndexedField2 value of "bar", then your aggregation query will get an OCC exception. This is generally not a problem because the driver will just retry, but it can become a perceived performance problem if the frequency of collision is high and that frequency increases with the number of documents in your transaction scope. We recommend keeping your transaction scope as small as you can.
Generally speaking, QLDB is optimized for writes and targeted fetches of small amounts of data using an equality comparison against an indexed value. It's great for validation reads that inform a transaction decision (does my account have enough balance, does this record already exist, give me customer record identified by unique ID 'X', etc.). As the number of documents in your transaction scope widens, the potential for OCCs and transaction timeouts increases. We generally recommend you stream data from QLDB into a secondary database to support OLAP, reporting, ad-hoc queries, etc.
So the real answer is that your query looks pretty good, but you should consider what your data set might look like in production now, next year, etc. and test for that to make sure you're good to go.