2017-09-27 3 views
0

J'ai un document comme ci-dessous.requête Mongodb par mois

{ 
    "_id" : 1, 
    "name" : "Robin", 
    "membership" : [ 
     { 
      "package" : 12, 
      "time" : "months", 
      "active" : true, 
      "start" : ISODate("2017-07-26T09:21:55.360Z") 
     }, 
     { 
      "package" : 1, 
      "time" : "months", 
      "active" : true, 
      "start" : ISODate("2017-09-26T09:51:46.915Z") 
     } 
    ] 
} 
{ 
    "_id" : 9, 
    "name" : "Linh Tran", 
    "membership" : [ 
     { 
      "package" : 1, 
      "time" : "months", 
      "active" : true, 
      "start" : ISODate("2017-09-26T09:57:37.638Z") 
     } 
    ] 
} 

Je souhaite interroger l'adhésion qui commence en septembre. Je sais qu'il y a $month (aggregation) dans le Doc mais ça ne couvre pas mon cas.

Mise à jour: La sortie devrait contenir le résultat où l'adhésion débutera en septembre. Moyenne autre mois comme Juillet pas montrer.

+1

Pouvez-vous donner un exemple de sortie de ce que vous attendez? –

Répondre

0

Exécution d'une opération globale qui utilise d'abord le $redact pipeline pour filtrer au niveau de la collecte des documents dont l'adhésion commence en Septembre comme suit:

db.test.aggregate([ 
    { 
     "$redact": { 
      "$cond": [ 
       { "$or": [ 
        "$membership", 
        { "$eq": [ { "$month": "$start" }, 9 ] } 
       ] }, 
       "$$DESCEND", 
       "$$PRUNE" 
      ] 
     } 
    } 
]) 

Exemple de sortie

/* 1 */ 
{ 
    "_id" : 1, 
    "name" : "Robin", 
    "membership" : [ 
     { 
      "package" : 1.0, 
      "time" : "months", 
      "active" : true, 
      "start" : ISODate("2017-09-26T09:51:46.915Z") 
     } 
    ] 
} 

/* 2 */ 
{ 
    "_id" : 9, 
    "name" : "Linh Tran", 
    "membership" : [ 
     { 
      "package" : 1.0, 
      "time" : "months", 
      "active" : true, 
      "start" : ISODate("2017-09-26T09:57:37.638Z") 
     } 
    ] 
}