ऐसा लगता है कि समस्या को इस तरह वर्णित किया जा सकता है:यदि आप ऑब्जेक्ट आईडी के स्थान पर अपनी कक्षाओं में स्ट्रिंग का उपयोग करते हैं, यदि आप उन आईडी को अन्य दस्तावेज़ों (और एम्बेडेड दस्तावेज़) में संदर्भ (कोई डीबीआरएफ) के रूप में उपयोग करना चाहते हैं, तो उन्हें धक्का दिया जाता है स्ट्रिंग के रूप में (यह ठीक है क्योंकि वे स्ट्रिंग्स हैं)। यह ठीक है क्योंकि स्प्रिंग डेटा उन्हें फिर से ऑब्जेक्टिड पर मैप कर सकता है, लेकिन यह ठीक नहीं है यदि आप मेरे द्वारा बताए गए प्रश्न की तरह करते हैं; तुलना में फ़ील्ड को ऑब्जेक्टिड में बदल दिया जाता है (इस मामले में $ne ऑपरेटर) लेकिन एम्बेडेड दस्तावेज़ में एक स्ट्रिंग के रूप में माना जाता है। तो, समाप्त करने के लिए, मेरी राय में $ne ऑपरेटर को इस मामले में क्षेत्र को एक स्ट्रिंग पर विचार करना चाहिए।
मेरा समाधान स्ट्रिंग को ऑब्जेक्टिड के रूप में उन दस्तावेज़ों में संग्रहीत करने के लिए एक कस्टम कनवर्टर लिखना था जहां आईडी एक संदर्भ है
public class VoteWriteConverter implements Converter<Vote, DBObject> {
@Override
public DBObject convert(Vote vote) {
DBObject dbo = new BasicDBObject();
dbo.put("userid", new ObjectId(vote.getUserid()));
dbo.put("value", vote.getValue());
return dbo;
}
}