2012-06-11 4 views
0

J'utilise mongodb en Java pour un de mes projets. L'utilisateur va entrer une heure qu'il sait être dans le fichier json. Ce que je veux faire est de rechercher le document qui contient cette heure et à partir de ce document jusqu'au prochain document LoginRequest tous les documents doivent être produits comme une sortie.analyser une quantité particulière de données à partir du fichier json en utilisant mongodb et java

For example: 
    { "_id" : { "$oid" : "4ceb753a70fdf877ef5113ca"}, "LoginRequest" : { "Time" : "11-06-2012 11:59:33", "innerAttr4" : "innerValue4"} } 
    { "_id" : { "$oid" : "4ceb753a70fdf877ef5113cc"}, "LoginResponse" : { "innerAttr1" : "innerValue1", "innerAttr4" : "innerValue4"} } 
    { "_id" : { "$oid" : "4ceb753a70fdf877ef5113cb"}, "OtherRequest" : { "innerAttr3" : "innerValue3"} } 
    { "_id" : { "$oid" : "4ceb753a70fdf877ef5113cd"}, "OtherResponse" : { "innerAttr2" : "innerValue2", "innerAttr4" : "innerValue4"} } 
    { "_id" : { "$oid" : "4ceb753a70fdf877ef5113ce"}, "LoginRequest" : { "Time" : "11-06-2012 12:34:05", "innerAttr4" : "innerValue4"} } 
    { "_id" : { "$oid" : "4ceb753a70fdf877ef5113cf"}, "LoginResponse" : { "innerAttr1" : "innerValue1", "innerAttr4" : "innerValue4"} } 
    { "_id" : { "$oid" : "4ceb753a70fdf877ef5113cg"}, "OtherRequest" : { "innerAttr3" : "innerValue3"} } 
    { "_id" : { "$oid" : "4ceb753a70fdf877ef5113ci"}, "LoginRequest" : { "Time" : "11-06-2012 14:59:33", "innerAttr4" : "innerValue4"} } 
    { "_id" : { "$oid" : "4ceb753a70fdf877ef5113cm"}, "LoginResponse" : { "innerAttr1" : "innerValue1", "innerAttr4" : "innerValue4"} } 
    { "_id" : { "$oid" : "4ceb753a70fdf877ef5113cj"}, "OtherRequest" : { "innerAttr3" : "innerValue3"} } 
    { "_id" : { "$oid" : "4ceb753a70fdf877ef5113cs"}, "OtherResponse" : { "innerAttr2" : "innerValue2", "innerAttr4" : "innerValue4"} } 

Supposons ici que l'utilisateur entre l'heure comme "11-06-2012 12:34:05". Ainsi, la sortie pour cela devrait être:

Output: 
    { "_id" : { "$oid" : "4ceb753a70fdf877ef5113ce"}, "LoginRequest" : { "Time" : "11-06-2012 12:34:05", "innerAttr4" : "innerValue4"} } 
    { "_id" : { "$oid" : "4ceb753a70fdf877ef5113cf"}, "LoginResponse" : { "innerAttr1" : "innerValue1", "innerAttr4" : "innerValue4"} } 
    { "_id" : { "$oid" : "4ceb753a70fdf877ef5113cg"}, "OtherRequest" : { "innerAttr3" : "innerValue3"} } 

Je suis en mesure d'obtenir { "_id" : { "$oid" : "4ceb753a70fdf877ef5113ce"}, "LoginRequest" : { "Time" : "11-06-2012 12:34:05", "innerAttr4" : "innerValue4"} } en sortie mais je veux que la sortie soit comme mentionné ci-dessus.

+0

Je ne comprends pas exactement comment puis-je imprimer tous ces documents à moins et jusqu'à ce que je reçoive le document LoginRequest suivant. J'ai beaucoup essayé mais je n'ai pas réussi. – shalki

+0

Pour l'exemple ci-dessus, je suis en mesure d'obtenir: '{" _id ": {" $ oid ":" 4ceb753a70fdf877ef5113ce "}," LoginRequest ": {" Time ":" 11-06-2012 12:34:05 ", "innerAttr4": "innerValue4"}} 'Mais comment obtenir les autres choses que je veux dans la sortie. – shalki

+0

Il serait préférable de restructurer la question et de définir clairement vos besoins. –

Répondre

2

Vous ne stockez rien dans vos documents LoginResponse ou OtherResponse qui les associe à la demande LoginRequest qui les a précédés. Par conséquent, avec votre schéma actuel, vous ne pouvez pas construire une requête pour renvoyer le LoginRequest suivi de tous les autres documents jusqu'à la prochaine LoginRequest. Sans connaître les détails du but et de l'architecture de votre application, il est difficile de vous donner une solution définitive. Voici cependant quelques suggestions:

(a) Stockez un horodatage dans tous les documents plutôt que seulement dans le LoginRequest. Ainsi, à la demande de LoginRequest, vous pouvez trouver le prochain LoginRequest (faire une requête ordonnée par le temps), puis rechercher tous les autres documents avec un horodatage entre les horodateurs des deux LoginRequests. (B) Si l'architecture de votre application le permet, stockez l'identifiant de LoginRequest dans les documents LoginResponse et OtherRequest qui le suivent (jusqu'au prochain LoginRequest). (C) Ne stockez pas de documents distincts pour LoginRequest, LoginResponse et OtherRequest, mais stockez plutôt un seul document dans la collection pour toutes les interactions pour une connexion particulière. Ensuite, ce sera une simple requête unique pour récupérer toutes ces informations.

Questions connexes