2012-10-17 12 views
5

के साथ सरणी संग्रह करना मैं सिद्धांत और मोंगो डीबी के साथ एक सरणी कैसे स्टोर कर सकता हूं?सिद्धांत और मोंगोडीबी

मुझे संदर्भ दस्तावेज़, केवल सरणी नहीं चाहिए।

उदाहरण:

Type[ 
    Type1, 
    Type2, 
    Type3 
] 

मैं नए सिद्धांत ODM डेटा प्रकार बनाने की जरूरत है?

उत्तर

13

यदि आपको किसी सरणी में दस्तावेज़ श्रेणी में मैप किए गए मानों को स्टोर करने की आवश्यकता नहीं है, तो आप collection फ़ील्ड मैपिंग का उपयोग कर सकते हैं, जो मोंगोडीबी में मूल सरणी के लिए मानचित्र करता है। hash प्रकार भी है, जो कि इसके भीतर कुछ भी मैप किए बिना मोंगो डीबी में किसी ऑब्जेक्ट में PHP में एक एसोसिएटिव सरणी को परिवर्तित करता है।

यदि आपके उदाहरण में "टाइप करें" एक मैप किए गए दस्तावेज़ वर्ग है, तो आप EmbedMany रिलेशनशिप का उपयोग करना चाहेंगे, जो मूल दस्तावेज़ में किसी एक या अधिक मैप किए गए दस्तावेज़ों को एक सरणी में संग्रहीत करेगा। मोंगोडीबी के भीतर, इसे वस्तुओं की एक सरणी के रूप में दर्शाया जाएगा, जो collection फ़ील्ड (सहयोगी सरणी की एक सरणी संग्रहित) के साथ आप स्वयं के साथ क्या कर सकते हैं; हालांकि, ओडीएम उन ऑब्जेक्ट्स को दस्तावेज़ उदाहरणों में हाइड्रेट करने के लिए एंबेडेनी मैपिंग का उपयोग करेगा।

+0

मुझे धन्यवाद के लिए काम किया। यह स्पष्ट नहीं है कि यह दस्तावेज़ों में निर्दिष्ट क्यों नहीं है http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/basic-mapping.html#doctrine-mapping-types –

+0

किस प्रकार का मैपिंग का उपयोग किसी अन्य कुंजी को जोड़ने के लिए सरणी को अद्यतन करने के लिए करना चाहिए: मान तत्व? – Sekai

+0

@ सेकाई: मुझे सवाल समझ में नहीं आया। 'संग्रह' प्रकार, MongoDB फ़ील्ड को लिखने से पहले 'array_values ​​()' के माध्यम से PHP मान को चलाता है (संख्यात्मक रूप से कुंजी को पुन: संशोधित करने के लिए)। 'हैश' रणनीति किसी ऑब्जेक्ट (यानी PHP में stdClass) को PHP मान को बीएसओएन ऑब्जेक्ट के रूप में सहेजने के लिए सुनिश्चित करती है। संग्रह/हैश मानों में से कोई भी कुंजी/मूल्य जोड़े मैप किए गए हैं (यह इन्हें एम्बेडेड दस्तावेज़ों (एंबेडेन और एंबेडेनी) से अलग करता है। – jmikola

4
... 
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB; 
... 
class MyClass 
{ 
    /** 
    * @MongoDB\Hash 
    */ 
    protected $tags = array(); 
} 

इसके अलावा, आप अगर आप एक प्रपत्र प्रकार है कि आप चर के प्रकार के साथ मदद करता है चाहता हूँ BSPTagBundle की जाँच कर सकते हैं।

5

आप अपनी जरूरत के अनुसार मोंगो प्रकार हैश या संग्रह का उपयोग कर सकते हैं।

हैश: स्टोर को एसोसिएटिव सरणी के रूप में स्टोर और पुनर्प्राप्त करता है।

संग्रह: स्टोर को संख्यात्मक अनुक्रमित सरणी के रूप में स्टोर और पुनर्प्राप्त करता है।

उदाहरण के लिए:

use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB; 

class Category 
{ 
    /** 
    * @MongoDB\Field(name="tags", type="collection") 
    */ 
    private $tags; 

    /** 
    * @MongoDB\Field(name="country_wise_total_count", type="hash") 
    */ 
    private $country_wise_total_count; 
} 

डेटा संग्रहीत किया जाता है जैसे:

"tags": [ 
    "man", 
    "boy", 
    "male", 
    "sandal", 
    "cloth", 
    "army boots", 
    "boots", 
    "sport shoes", 
    "school", 
    "casual", 
    "office" 
    ], 

"country_wise_total_count": { 
    "NP": NumberInt(7), 
    "US" : NumberInt(10) 
    }