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 !!