Group MongoDB Collection and Find Top N members in esProc

Uncategorized 1241 0

Problem source:https://groups.google.com/forum/#!topic/mongodb-user/Rjv6lyUCe1s .

Collection last3 has two fields: variable and timestamp. You need to first group documents by variable and find from each group the top 3 ones with the latest timestamp, and then find from the three documents the one with the earliest timestamp.

Below is the selection from last3

esProc_NoSQL_mongodb_grouptopN_1

esProc code:

  A B
1 =MongoDB(“mongo://localhost:27017/local?user=test&password=test”)
2 =A1.find(“last3″,,”{_id:0}”;”{variable:1}”)
3 for A2;variable =A3.top(-timestamp;3)
4   =B2=B2|B3
5 =B2.top(timestamp)  
6 =A1.close()  

A1: Connect to MongoDB. The connection string format is mongo://ip:port/db?arg=value&…

A2: Use find function to retrieve data from MongoDB, sort it and create a cursor. last3 is the collection name; no filtering criterion is specified; and all fields except _id will be retrieved and sorted by variable. In esProc find function, which is analogous to the combination of MongoDB find, sort and limit function, the filtering criterion syntax follows the MongoDB rules.

A3: Fetch data from the cursor by loop, getting a group of documents with the same variable field each time. A3’s working range is the indented B3 to B4, where A3 can be used to reference the loop variable. A3’s result is in-memory data. The following is one of the results of data fetching:

esProc_NoSQL_mongodb_grouptopN_3

B3: Find from the current group of documents the three ones with the latest timestamp.

B4: Append each of B3’s loop results to B2. The result of B2 is as follows:

esProc_NoSQL_mongodb_grouptopN_4

A5:Find the document with the earliest timestamp from B2. It is as follows:

esProc_NoSQL_mongodb_grouptopN_5

A6:Close MongoDB connection.

 

 

FAVOR (0)
Leave a Reply
Cancel
Icon

Hi,You need to fill in the Username and Email!

  • Username (*)
  • Email (*)
  • Website