2012-11-20 13 views
6

मैं एक जावा ऐप पर काम कर रहा हूं जो मोंगोडीबी को स्टोरेज के रूप में उपयोग करता है, हालांकि मैंने एक समस्या में भाग लिया है। जब कोई उपयोगकर्ता मेरे ऐप में कोई टिप्पणी जोड़ता है, तो यह दस्तावेज़ को संग्रह संग्रह में जोड़ता है, फिर सांख्यिकीय डेटा के लिए अपरिवर्तित करता है। हालांकि, अपरर्ट केवल पहली बार जोड़ता है (अद्यतन के बाद कोई कॉल नहीं या नया डेटा डालें)।जावा मोंगो टेम्पलेट: उपरोक्त वस्तुएं उत्पन्न नहीं कर रहे हैं

public class CommentDAO implements ICommentDAO { 

    @Autowired 
    @Qualifier(value = "mongoDB") 
    MongoTemplate mongoTemplate; 

    public UserComment addComment(UserComment userComment) { 
     updateStats(userComment, 1L); 
     mongoTemplate.save(userComment); 
     return userComment; 
    } 

    public void updateStats(UserComment userComment, Long offset) { 
     Update update = new Update(); 
     update.inc("total", offset); 
     Query query = query(where("entity").is(userComment.getEntity())); 

     WriteResult wr = mongoTemplate.upsert(query, update, CommentStat.class); 
    } 
} 

यहाँ मेरी टिप्पणी संग्रह में परिणामों की एक उदाहरण है::

{ 
    "_id" : ObjectId("50ab0566e4b0ea8f74b82d48"), 
    "_class" : "com.test.models.comment.UserComment", 
    "userId" : 4, 
    "ownerId" : 3, 
    "comment" : "Test comment", 
    "type" : "ART", 
    "entity" : "759446489112216656", 
    "date" : Date(1353385318079) 
}, 
{ 
    "_id" : ObjectId("50ab0691e4b0775cf7daacad"), 
    "_class" : "com.test.models.comment.UserComment", 
    "userId" : 4, 
    "ownerId" : 3, 
    "comment" : "Another test", 
    "type" : "ART", 
    "entity" : "759446489112216656", 
    "date" : Date(1353385617619) 
} 

... और मेरी एकल, अकेला स्टेट ...

{ 
    "entity" : "759446489112216656", 
    "total" : 1 
} 

सूचना यहाँ प्रासंगिक कोड है स्टेट संग्रह पर अनुपलब्ध "_id" और "_class"। मुझे अपने मोंगो या टॉमकैट लॉग में कोई त्रुटि नहीं मिल रही है। क्या किसी ने कभी इस समस्या में भाग लिया है या पता है कि सौदा क्या है? आपकी सहायताके लिए धन्यवाद!

नोट: अगर मैं Upsert हटाने और स्टेट सामान्य रूप से जोड़ने के लिए, सब कुछ ठीक

+0

क्या आप मोंगो डीबी का संस्करण प्रदान कर सकते हैं जिसके बारे में आप चल रहे हैं और आंकड़ों के संग्रह पर अधिक जानकारी? आप db.statistics.stats() चलाकर मोंगो खोल पर संग्रह सारांश मुद्रित कर सकते हैं - अपने संग्रह नाम के साथ "आंकड़े" को प्रतिस्थापित कर सकते हैं। –

+0

आपने स्टेट संग्रह से अपनी प्रविष्टि कैसे आउटपुट की? यह संभव नहीं है कि यह ऑब्जेक्ट आईडी() के बिना मोंगोडीबी में डाला जाएगा - तो यह ऐसा लगता है कि यह जावा पीओवी से ऊपर की तरह दिखता है? –

उत्तर

2

मैं आपको लगता है (इस, ज़ाहिर है, एक इकाई है, जो वांछनीय नहीं है के लिए कई आँकड़े कहते हैं) कहते हैं @Document(collection = "colName") के साथ अपनी कक्षा को एनोटेट करने का प्रयास कर सकता है - मेरे पास आज भी यही समस्या थी। अप्सर्ट्स कभी-कभी वास्तव में अजीब काम करते हैं: मैं अभी भी बग को लगातार प्राप्त करने का तरीका नहीं समझ सकता।

असल में मैंने जो किया वह एक वर्कअराउंड (अस्थायी, बस "इसे काम करें") बनाया गया है, जहां मुझे ऑब्जेक्ट में "_id" उपस्थिति की जांच करनी थी और यदि यह शून्य है, तो मैं सहेजता हूं, अगर नहीं - मैं अद्यतन का प्रयोग करें। हाँ, यह अजीब है, लेकिन यह काम किया।

0

मुझे एक समस्या थी जहां मैं एक ऐसी वस्तु को अपरिवर्तित कर रहा था जिसमें पहले से ही एक आईडी थी, इसलिए _id संरक्षित था। हालांकि, _class सहेजा नहीं गया था। मेरा कामकाज यह सुनिश्चित करने के लिए कि मेरे पास _class डेटा हमेशा होता है:

@Field("_class") 
protected String _class = Foo.class.getName(); 
संबंधित मुद्दे