@Alex_Pickard, here are my findings.
I was able to observe the difference you explained. But I was curious so rather that just
I did
print()
print( db.tracking_temp.find(query, project).limit(1) )
Not being too familiar with .js, I was surprised that documents were not printed but the following:
DBQuery: test.tracking_temp -> { "$and" : [ { "Ships.Number" : NumberLong("621356461827072000") }, { "SecondEvent.Code" : "1111" } ] }
Which is probably some kind of promise that is not executed when you do not do [0] but it is when you do. Said otherwise with [0], you do not execute the query and you do not transfer any document over the wire. Wonderful world of async I guess.