2017-10-15 3 views
0

i ont un schéma d'ordre qui, comme ci-dessous objet représenter:GroupBy et filtre avec l'agrégation

{ 
    "_id" : ObjectId("59dce1fa2d57920d3e62bdf3"), 
    "updatedAt" : ISODate("2017-10-10T15:06:34.205+0000"), 
    "createdAt" : ISODate("2017-10-10T15:06:34.128+0000"), 
    "_customer" : ObjectId("59dce1f92d57920d3e62bd44"), 
    "_distributor" : ObjectId("59dce1f92d57920d3e62bd39"), 
    "status" : "NEW", 
} 

maintenant je veux groupe et filtrer. groupe par le même _customer et filtre avec champ createdAt. comment utiliser l'agrégation pour gérer les deux?

+0

Votre question est large. Mais suivez la documentation d'agrégation en utilisant [$ group] (https://docs.mongodb.com/manual/reference/operator/aggregation/group/) puis éventuellement [$ match] (https://docs.mongodb.com/manual/reference/operator/aggregation/match /) pour filtrer. – Mikey

Répondre

0

Essayez le code ci-dessous à l'aide $match, $group et $project

Orders.aggregate([ 
    {$match : { createdAt : "<your createdAt value here>"}}, 
    {$group : { 
     _id : { _id : "$_customer" }, 
     data : { $addToSet : { _id : "$_id" , updatedAt : "$updatedAt" , createdAt : "$createdAt" , _distributor : "$_distributor" , status : "$status"} } 

    }}, 
    { $project : { 
     _id : "$_id._id", 
     data: 1 
    }} 
]) 

Cela vous donnera un document dans la structure suivante, et ajoutera que les enregistrements filtrés en fonction de createdAt

{ 
    _id : "customer 1", 
    data : [ 
     { _id : "" , updatedAt : "" , createdAt : "" , _distributor : "" , status:""}, 
     { _id : "" , updatedAt : "" , createdAt : "" , _distributor : "" , status:""} 
    ] 
}, 
{ 
    _id : "customer 2", 
    data : [ 
     { _id : "" , updatedAt : "" , createdAt : "" , _distributor : "" , status:""}, 
     { _id : "" , updatedAt : "" , createdAt : "" , _distributor : "" , status:""}, 
    { _id : "" , updatedAt : "" , createdAt : "" , _distributor : "" , status:""} 
    ] 
}