2013-11-22 17 views
5

MongoDB'de bir belgem var ve bunu PHP'de çözmeyi deniyorum. Henüz anothersubdocument içeren bir alt belgeye sahip bir belgeyi açmak istiyorum. Belge yalnızca dizeleri ve sayıları içeriyorsa, ancak başka bir alt belgeyi içeriyorsa, bunu işe alamıyorumsa, bunu başarılı bir şekilde yapabildim.Mongodb iç içe geçmiş belgeleri çözme

exception: $unwind: value at end of field path must be an array 

değil alt belgenin başka düzeyini içeren bir alt belge gevşeyin Can: bu hatayı alıyorum? Eğer değilse, bunu yapmayı nasıl düşünürdünüz?

Şimdiden teşekkürler!

{ 
    "_id": { 
     "$oid": "526fdc1fd6b0a8182300009c" 
    }, 
    "items": [ 
       { 
      "quantity": "1", 
      "category_id": { 
       "$oid": "526fdc1fd6b0a81823000029" 
      }, 
      "category": "test", 
      "images": [ 
       { 
        "name": "9by9easy.PNG", 
        "path": "upload_files/nibh-vulputate-mauris-corporation/", 
        "file_path": "upload_files/nibh-vulputate-mauris-corporation/68e7c50bde1476e96ca2461dc553cce5528fb70e41b1f.PNG", 
        "size": 8761 
       }, 
       { 
        "name": "9by9hard.PNG", 
        "path": "upload_files/nibh-vulputate-mauris-corporation/", 
        "file_path": "upload_files/nibh-vulputate-mauris-corporation/8cd2dcf4fcd476262db2eba3fdb2c39a528fb70e42757.PNG", 
        "size": 11506 
       } 
      ], 
      "link": "fghfhfhfg" 
     } 
    ], 
    "name": "Nibh Vulputate Mauris Corporation", 

} 
+0

ps çalışacaktır. Ana nokta, bir alt belgeye sahip olan gevşeyebilir ve altyazı olabilir mi? –

cevap

14

Ne yapmaya çalıştığınız şeyi MongoDB ile mümkün olduğunu biliyoruz:

$project = array(
       '$project' => array(
        '_id' => 1, 
        'items' => 1, 
       ) 
      ); 

$unwind = array(
       '$unwind' => '$items' 
      ); 


$query = $mongo->store->aggregate($project,$unwind_items); 

Bu yapısı şöyledir:

Bu

sorgusu olur. aggregate() komutu, gerek duyduğunuz kadar argüman alabilir. Bu

db.collection.aggregate(
    { $project: { 
    _id: 1, 
    items: 1 
    } }, 
    { $unwind: '$items' }, 
    { $unwind: '$items.images' } 
); 

gibi Mongo kabuğunda

, bir komut items alt belge, daha sonra images alt belge gevşeyin edecektir.

sorunuzu koduna dayanarak, belki de bu birden fazla öğe varsa

$project = array(
    '$project' => array(
    '_id' => 1, 
    'items' => 1, 
) 
); 

$unwind_items = array(
    '$unwind' => '$items' 
); 

$unwind_images = array(
    '$unwind' => '$items.images' 
); 


$query = $mongo->store->aggregate($project,$unwind_items,$unwind_images); 
İlgili konular