2011-11-12 7 views
2

Bonjour à tous J'utilise la méthode MongoDB find() comme ceci:MongoDB: objectId à cordes

$cursor = $collection->find(); 
foreach($cursor as $doc) { 
    // do something.... 
} 

c'est ok, mais ma propriété _id est autogenereted quand j'utiliser le code ci-dessus $ doc [_id] est l'objet, mais je besoin d'une chaîne.

Comment puis-je le convertir en chaîne automatiquement. Pas comme ceci:

foreach($cursor as $doc) {  
    $doc['_id'] = (string)$doc['_id']; 
} 
+1

Pourquoi avez-vous besoin d'être une chaîne? Dans la plupart des cas où une chaîne est nécessaire ('echo'ing, etc.), le' __toString() 'de l'objet sera appelé automatiquement. Dans tous les cas, n'écrasez pas l'objet '_id' de l'objet' $ doc' avec une chaîne. – salathe

+0

@ user1006884: En fait, le moulage devrait fonctionner. Quel est le problème? – netcoder

+0

J'utilise ceci: json_encode ($ doc); donc je n'utilise pas d'écho. – Erik

Répondre

2

Manipulation MongoId correctement par json_encode utilisé pour être a bug in the php driver. Il devrait être corrigé depuis v1.0.11.

+0

Merci pour la réponse! – Erik

1

Pour convertir automatiquement ObjectId à la chaîne de tout résultat du MongoDB-pilote que j'utilise cette fonction:

function convertMongoIds(array &$array){ 
    foreach ($array as &$element){ 
     if (is_array($element)){ 
      convertMongoIds($element); 
     }else if (is_object($element) && get_class($element) == "MongoId"){ 
      $element = (string) $element; 
     } 
    } 
} 
0
`$result = $collection->findOne([ 
    '_id' => new \MongoDB\BSON\ObjectId("5a59b11b3ffd3aec4a23cd2c") 
]); 


var_dump((string)$result->_id, $result->_id->__toString());` 

Ils travaillent tous deux dans la version 3.6.

reference

Questions connexes