2013-11-22 11 views
5

मेरे पास मोंगोडीबी में एक दस्तावेज़ है और मैं इसे PHP में खोलने की कोशिश कर रहा हूं। मैं ऐसे दस्तावेज़ को खोलना चाहता हूं जिसमें उप-दस्तावेज़ है जिसमें अभी तक एक और स्कूली दस्तावेज़ शामिल है। यदि दस्तावेज़ में केवल स्ट्रिंग्स और संख्याएं हैं, तो मैं यह सफलतापूर्वक करने में सक्षम था, लेकिन यदि इसमें कोई अन्य उप-दस्तावेज़ शामिल है तो मैं इसे काम नहीं कर सकता। मुझे यह त्रुटि मिलती है:मोंगोड नेस्टेड दस्तावेजों को खोलने

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

क्या आप एक उप-दस्तावेज़ को अनदेखा नहीं कर सकते जिसमें उप-दस्तावेज़ का एक और स्तर शामिल है? यदि नहीं, तो आप ऐसा करने के बारे में कैसे जाएंगे?

अग्रिम धन्यवाद!

{ 
    "_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। मुख्य बिंदु क्या आप अनदेखा कर सकते हैं और उप-दस्तावेज जिसमें उप-दस्तावेज है –

उत्तर

14

मुझे पता है कि आप क्या करने की कोशिश कर रहे हैं क्या MongoDB के साथ संभव है:

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

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


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

यह संरचना है:

इस क्वेरी है। aggregate() कमांड जितना आवश्यक हो उतना तर्क ले सकता है।

मोंगो खोल में, इस

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

की तरह एक आदेश items subdocument, तो images subdocument तनाव कम होगा।

अपने प्रश्न में कोड के आधार पर, शायद यह एक से अधिक आइटम देखते हैं काम करेंगे

$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); 
संबंधित मुद्दे