[Webinar] Streamline your web hosting managementRegister Today

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 97
  • Last Modified:

Mongodb using last result as the next query input?

I have a mongodb document as below.  I want to return the documents with Maximum CurrentTicks, but since the tick was dynamically generated, I would need to return it to a variable LastTick, but when I try to retireve it in to the next query

First Query:          var LastTick = db.HKMachineStatus_v2.aggregate({$group: {_id : '' , Tick: {$max: "$CurrentTicks"}}})
Second Query:     db.HKMachineStatus_v2.find({"CurrentTicks" : LastTick})

it just return me "Fetched 0 record(s) in 5ms" But there is no result to return.

Then I only run the first Query it did return me the result as the image attached Result_outPut_1.jpg .

So my questions are
1. how to retrieve the Tick's value from LastTick
2. will my second Query success if I run in that way?
3. if not what will be better way to do it?  


below are the mongodb documents sample.

{
    "_id" : ObjectId("580e1f26fa9382133c202a04"),
    "ProcessTime" : "24472016-22:47:58",
    "HostName" : "APPServer",
    "IPAddress" : "192.168.0.1",
    "OS" : " Linux",
    "Status" : "Machine running",
    "CurrentTicks" : "636129460749210826"
},
{
    "_id" : ObjectId("580e1f26fa9382133c202a05"),
    "ProcessTime" : "24472016-22:47:58",
    "HostName" : "APPServer2",
    "IPAddress" : "192.168.0.2",
    "OS" : " Linux",
    "Status" : "Machine running",
    "CurrentTicks" : "636129460749210826"
},
{
    "_id" : ObjectId("580e21e1fa9382133c202d16"),
    "ProcessTime" : "24582016-22:58:57",
    "HostName" : "DC",
    "IPAddress" : "192.168.0.43",
    "OS" : " Windows",
    "Status" : "Machine running",
    "CurrentTicks" : "636129467352901129"
},
{
    "_id" : ObjectId("580e21e1fa9382133c202d17"),
    "ProcessTime" : "24582016-22:58:57",
    "HostName" : "DC2",
    "IPAddress" : "192.168.0.45",
    "OS" : " Windows",
    "Status" : "Machine running",
    "CurrentTicks" : "636129467352901129"
}

Open in new window

Result_output_1.JPG
0
Steve Wong
Asked:
Steve Wong
  • 2
  • 2
1 Solution
 
Julian HansenCommented:
Can you not just do a sort and take the top item?

If you don't find a solution - bump this thread and I will see if I can put a script together.
0
 
Steve Wongsystem analystAuthor Commented:
Hi Julian,

Thanks for your reply,  I have some background to share with you first.

Background:

Currently I had 75 Machines provisioned, two days ago I scanned there was a 33 machines provisioned but last week there was 150+ machine provisioned.

I have a script running at the server backend to gather all the machines current status, I didn't know where they were  (which subnet and what there name was/is ) and how many we had, machines were dynamically provision and dismissal.

I knew the data-set is bounded with a Ticker. Each batch run on the script are on the same ticker no.

So could you kindly show me some scripts on how to make a mongodb query to get all machines from the largest ticker?

Regards,
Steve
0
 
leakim971PluritechnicianCommented:
1. how to retrieve the Tick's value from LastTick
with nodejs :
var tick = LastTick.Tick;

Open in new window

2. will my second Query success if I run in that way?
Not sure what it going to return as your CurrentTicks is not unique

3. if not what will be better way to do it?  
Another way to  get the last record using the _id :
var LastTick = db.HKMachineStatus_v2.find({}).sort({_id:-1}).limit(1);

Open in new window

0
 
Steve Wongsystem analystAuthor Commented:
Thanks, it works great
0
 
leakim971PluritechnicianCommented:
why a B grade ?
0

Featured Post

Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now