2012-05-28 8 views
-1

J'ai données comme ceci:MongoDB et PHP - requête regex trouver dans le tableau imbriqué

{ 
    "_id": ObjectId("4fc3abc9751c38c811000002"), 
    "timeStamp": ISODate("2012-05-28T16: 45: 58.0Z"), 
    "loadTime": 2.3101460933685, 
    "description": { 
    "0": { 
     "level": NumberInt(0), 
     "description": "Some description" 
    } 
    }, 

Comment puis-je trouver() les données « de niveau » en utilisant le tableau de 0-8 comme dans ma requête ci-dessous?

Ma requête ressemble à ceci:

find(Array ([description] => Array ([0] => Array ([level] => Array ([$in] => Array ([0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8)))))) 

Répondre

3

Cela devrait faire l'affaire:

->find(array('description.0.level' => array('$in' => range(0, 8)))); 

Cependant, je ne vois pas pourquoi pas tout à fait que vous avez là une touche "0". Le document devrait vraiment ressembler à:

{ 
    "_id": ObjectId("4fc3abc9751c38c811000002"), 
    "timeStamp": ISODate("2012-05-28T16: 45: 58.0Z"), 
    "loadTime": 2.3101460933685, 
    "description": [ 
    { 
     "level": 0, 
     "description": "Some description" 
    } 
    ], 
} 

Dans ce cas, vous pouvez trouver le « niveau » comme:

->find(array('description.level' => array('$in' => range(0, 8)))); 
+0

Il est un peu déroutant, mais il pourrait y avoir un dossier comme: « description »: { "0": { "niveau": NumberInt (0), "description": "Certaines description" }, "1": { "niveau": NumberInt (0), "description": « Certains description " " Quelle est la raison du "0" ... –

+0

Aussi, merci, cela a fonctionné! –