2011-08-24 8 views
0

J'ai un document qui ressemble à ceci:Comment trouver un document dans un intervalle de temps d'un document incorporé enregistré?

{ "_id" : ObjectId("4e5044ecf9d7954533000002"), "events" : [ 
     { 
       "state" : 1, 
       "time" : 1313882989, 
     }, 
     { 
       "time" : 1313883005, 
       "state" : 0, 
     } 
]} 

Vous pouvez voir que les « événements » est un tableau de documents intégrés. state: 1 signifie que le document a été mis à "actif" à ce moment-là (secondes en UTC), et l'état: 0 signifie qu'il a été défini "inactif" à ce moment-là. Cela essentiellement me donner un intervalle de temps quand ce document a été actif (1313882989-1313883005)

Maintenant Im essayant de déterminer quels documents ont été actifs à un moment donné, comme à 1.313.883.013, un temps qui se situe entre l'actif et inactif événements.

je peux obtenir quelque chose avec cette requête:

db.plays.find({events:{$elemMatch:{state:1,time:{$lte:1313883013}}}}) 

Il correspond à un document incorporé complet où state = 1 et le temps < 1313883013. Cela ne suffit pas cependant, parce que je dois veiller à ce que le document ne contient pas aussi un événement inactif avant ou 1313883013. Je l'ai essayé ceci:

db.plays.find({events:{$elemMatch:{state:1,time:{$lte:1313883013}},$not:{$elemMatch:{state:0,time:{$lte:1313883013}}}}}) 

mais en vain. Et j'ai essayé différentes variantes de cela aussi.

J'espère que j'ai fait assez clair, merci d'avance pour toute aide !!

Répondre

0

N'incluez pas l'état: 1 dans votre requête. A partir du résultat obtenu, vérifiez la valeur de l'état (0 ou 1).

Questions connexes