MongoDB How to query data in object with random names?
If I want to search all news with "oid" : "421", what command should I
  use?


As per MongoDB BOL $match (aggregation) Filters the documents to pass only the documents that match the specified condition(s) to the next pipeline stage.

The $match stage has the following prototype form:

{ $match: { &lt;query&gt; } }


So, in your case the query will be like that

   db.locations.aggregate({$match: {'4210003170944.oid': '421'}}).pretty()


Let's from starting onward i am going to show through mongo shell .
First i am going to create a collection name as locations. which is a collection name in your query. Then i will insert the data , which you have provided through the code and the do the desire query with $match (aggregation).

&gt; db.createCollection("locations")
{ "ok" : 1 }
&gt; db.locations.insert({
... "_id" : ObjectId("5a6d068b0088c92a34324d8e"),
... "4210003170944" :
...     {
...     "date" : "20180126",
...     "sectionId" : "100",
...     "rank" : "1",
...     "newsTitle" : "Foo",
...     "oid" : "421",
...     "aid" : "0003170944"
...     },
... "2140000800903" :
...     {
...     "date" : "20180126",
...     "sectionId" : "100",
...     "rank" : "2",
...     "newsTitle" : "Bar",
...     "oid" : "214",
...     "aid" : "0000800903"
...     }
... }
... )
WriteResult({ "nInserted" : 1 })
&gt;
&gt; db.locations.aggregate({$match: {'4210003170944.oid': '421'}}).pretty()
{
        "_id" : ObjectId("5a6d068b0088c92a34324d8e"),
        "4210003170944" : {
                "date" : "20180126",
                "sectionId" : "100",
                "rank" : "1",
                "newsTitle" : "Foo",
                "oid" : "421",
                "aid" : "0003170944"
        },
        "2140000800903" : {
                "date" : "20180126",
                "sectionId" : "100",
                "rank" : "2",
                "newsTitle" : "Bar",
                "oid" : "214",
                "aid" : "0000800903"
        }
}


Hope this will help out to you.