mongodb - Get document based on last item in arrays property -


i need retrieve orders, based on status code on property on last element in array.

my structure follows.

{   "_id" : "3580bdba-4017-40af-939d-7391d70b3511",    "ispublic" : true,    "mailreceiptdispatch" : {     "transfersupervisor" : {       "transferstatuses" : [{           "transferstate" : 0,           "transfertime" : isodate("2015-05-29t11:21:20.722z")         }, {           "transferstate" : 1,           "transfertime" : isodate("2015-05-29t11:54:10.013z")         }, {           "transferstate" : 2,           "transfertime" : isodate("2015-05-29t11:54:12.462z")         }],       "istransferedlimitreached" : false,       "latesttransferingstatus" : {         "transferstate" : 2,         "transfertime" : isodate("2015-05-29t11:54:12.462z")       }     },     "exceptionlog" : [],     "haswarningbeensent" : false   } } 

so need objects need based on like: {mailreceiptdispatch.tranfersupervisor.transferstatuses.[get last in array].transferstate : 2}`

i tried slice, retrieve object. mi need @ objects property. elemmatch might useful, can't figure out how connect both slice , elemmatch.

mongo aggregation used find out last transferstate, first unwind transferstatuses array , used either sort or max in aggregation latest transferstate below :

1> sort transfertime in aggregation :

 db.collectionname.aggregate({"$unwind":"$mailreceiptdispatch.transfersupervisor.transferstatuses"},                              {"$sort":{"mailreceiptdispatch.transfersupervisor.transferstatuses.transfertime":-1}},                              {"$group":{"_id":"$_id","transferstate":{"$first":"$mailreceiptdispatch.transfersupervisor.transferstatuses.transferstate"},                                          "transfertime":{"$first":"$mailreceiptdispatch.transfersupervisor.transferstatuses.transfertime"}}}                              ).pretty() 

2> use max in aggregation :

db.collectionname.aggregate({"$unwind":"$mailreceiptdispatch.transfersupervisor.transferstatuses"},                             {"$group":{"_id":"$_id","transferstate":{"$max":"$mailreceiptdispatch.transfersupervisor.transferstatuses.transferstate"},                                        "transfertime":{"$max":"$mailreceiptdispatch.transfersupervisor.transferstatuses.transfertime"}}}                            ).pretty() 

Comments

Popular posts from this blog

Java 3D LWJGL collision -

spring - SubProtocolWebSocketHandler - No handlers -

methods - python can't use function in submodule -