2017-03-15 3 views
0

Ich bin neu in MongoDB. Ich habe eine Anforderung, das späteste aktualisierte Produkt für bestimmtes Datum von einer Reihe von Produkten zu erhalten. Unten ist das JSON-Objekt meiner Anforderung.Aggregierte Abfrage in MongoDB

{ 
    "_id": ObjectId("10001"), 
    "product": [{ 
     "image": "./../../../prod1.html", 
     "name": "product", 
     "version": 1, 
     "updatedDate": "14-03-2017" 
    }, { 
     "image": "./../../../prod1.html", 
     "name": "product", 
     "version": 2, 
     "updatedDate": "14-03-2017" 
    }, { 
     "image": "./../../../prod1.html", 
     "name": "product", 
     "version": 1, 
     "updatedDate": "15-03-2017" 
    }, { 
     "image": "./../../../prod1.html", 
     "name": "product", 
     "version": 2, 
     "updatedDate": "15-03-2017" 
    }, { 
     "image": "./../../../prod1.html", 
     "name": "product", 
     "version": 3, 
     "updatedDate": "15-03-2017" 
    }, { 
     "image": "./../../../prod1.html", 
     "name": "product", 
     "version": 4, 
     "updatedDate": "15-03-2017" 
    }] 
}, { 
    "_id": ObjectId("10002"), 
    "product": [{ 
     "image": "./../../../prod1.html", 
     "name": "product", 
     "version": 1, 
     "updatedDate": "14-03-2017" 
    }, { 
     "image": "./../../../prod1.html", 
     "name": "product", 
     "version": 2, 
     "updatedDate": "14-03-2017" 
    }, { 
     "image": "./../../../prod1.html", 
     "name": "product", 
     "version": 1, 
     "updatedDate": "15-03-2017" 
    }, { 
     "image": "./../../../prod1.html", 
     "name": "product", 
     "version": 2, 
     "updatedDate": "15-03-2017" 
    }, { 
     "image": "./../../../prod1.html", 
     "name": "product", 
     "version": 3, 
     "updatedDate": "15-03-2017" 
    }] 
}, 
} 

Ich brauche eine Abfrage - die ein Produkt mit 14-03-2017 mit der neuesten Version abrufen wird.

Erwartetes Ergebnis ist:

{ 
"_id" : ObjectId("10001"), 
"product" : [ 
    {"image" : "./../../../prod1.html","name" : "product","version" : 4,"updatedDate":"15-03-2017"} 
]}, 
{ 
"_id" : ObjectId("10002"), 
"product" : [ 
    {"image" : "./../../../prod1.html","name" : "product","version" : 3,"updatedDate":"15-03-2017"} 
]} 

Es wäre sehr zu schätzen wissen jemand mir mit dem Aggregat-Funktion kann helfen, die erwarteten Ergebnisse zu erhalten.

+0

Benötigen Sie ein Produkt mit dem neuesten Datum und neuester Version in diesem Zeitpunkt (Datum enthält mit mehreren Versionen) – yuvan

+0

Was ist Ihr MongoDB-Server zu holen Ausführung? – chridam

Antwort

1

Verwenden Aggregat Befehl,

db.collection.aggregate([{ 
    $unwind: "$product" 
}, { 
    $sort: { 
     "product.updatedDate": 1 
    } 
}, { 
    $group: { 
     _id: "$_id", 
     product: { 
      $last: "$product" 
     } 
    } 
}]) 

Ausgang:

{ 
    "_id" : ObjectId("10002"), 
    "product" : { 
     "image" : "./../../../prod1.html", 
     "name" : "product", 
     "version" : 3, 
     "updatedDate" : "15-03-2017" 
    } 
} 
{ 
    "_id" : ObjectId("10001"), 
    "product" : { 
     "image" : "./../../../prod1.html", 
     "name" : "product", 
     "version" : 4, 
     "updatedDate" : "15-03-2017" 
    } 
} 
+0

Hallo Freund, vielen Dank. Es hat perfekt funktioniert. Danke für deine sofortige Antwort. – yuvan