2012-12-26 47 views
6

मान लें कि मैं निम्नलिखित की तरह ऐसी इकाइयों है:उप संग्रह के साथ वसंत डेटा mongo @CompoundIndex का उपयोग कैसे करें?

@Document(collection = "doc_a") 
public class A {  
    @Field("id") 
    private Integer id; 

    @Field("b") 
    private Collection<B> b; 
    ... 
} 


public class B {  
    @Field("id") 
    private Integer id; 
    ... 
} 

यह संभव है A.id और B.id एक साथ के संबंध में एक compoundIndex उपयोग करने के लिए?

@CompoundIndex(name = "aid_bid_idx", def = "{'id', 'b.id'}") 

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

मैं शायद की तरह मतलब है।

+0

क्या आपने इसे आजमाया है? यह काम नहीं करता है? –

+0

मैंने अभी तक कोशिश नहीं की है, हमारे पर्यावरण में यह समझना मुश्किल है कि इंडेक्स बनाए गए हैं या सफलतापूर्वक काम कर रहे हैं या नहीं। Mongodb जिम्मेदारी हमारे वास्तुकार के स्वामित्व में है, और आजकल वह उपलब्ध नहीं है। यही कारण है कि मैं यहां से पहले पूछना चाहता था। "व्याख्या()" के साथ उदाहरण प्रदान करने के लिए – Javatar

उत्तर

9

मैंने अपने ऐप में इस तरह के कंपाउंड इंडेक्स की कोशिश की है, जो वसंत डेटा का भी उपयोग करता है, और ठीक से काम करता है। आप केवल @CompoundIndex एनोटेशन में सूचकांक परिभाषा को सही करने के लिए है:

@CompoundIndex(name = "aid_bid_idx", def = "{'id' : 1, 'b.id' : 1}") 
@Document(collection = "doc_a") 
public class A {  
    @Field("id") 
    private Integer id; 

    @Field("b") 
    private Collection<B> b; 
    ... 
} 

public class B {  
    @Field("id") 
    private Integer id; 
    ... 
} 

आप (जैसे इस प्रकार) की व्याख्या के साथ एक प्रश्न मोंगो खोल में चलाते हैं, तो आपको लगता है कि सूचकांक * aid_bid_idx * उपयोग किया जाएगा देखेंगे।

db.doc_a.find({ "id" : 1, "b.id" : 1}).explain() 

परिणाम कुछ इस तरह होगा:

{ 
    "cursor" : "BtreeCursor aid_bid_idx", 
    ... 
} 
+0

Thx। – Vincent

1

मैं एक ही समस्या, मेरे लिए मिगुएल के समाधान काम किया था लेकिन मैं एक @CompoundIndexes अंदर @CompoundIndex रैप करने के लिए किया था, अन्यथा यह नहीं था ' टी काम (मैं स्प्रिंग रू का उपयोग कर रहा हूँ)।

@CompoundIndexes({ 
    @CompoundIndex(name = "aid_bid_idx", def = "{'id' : 1, 'b.id' : 1}") 
}) 
@Document(collection = "doc_a") 
public class A {...} 
+0

मुझे लगता है कि CompounIndex सीधे भी काम करेगा। प्रलेखन में अनुपलब्ध एक चीज यह है कि जब वे कोड ब्लॉक में उन्हें प्रस्तुत करने के बाद इंडेक्स बनाए जाएंगे तो वे उल्लेख करने में विफल रहते हैं। थोड़ी देर के लिए इसे खेलने के बाद, मैं देखता हूं कि कोड में उन्हें पेश करने वाले नए दस्तावेज़ पोस्ट को डालने के बाद ही इंडेक्स बनाए जा रहे हैं। –