दस्तावेज़ीकरण से , मॉर्फिया नल/खाली मानों को संग्रहीत नहीं करता है (डिफ़ॉल्ट रूप से) इसलिए क्वेरी
query.and(
query.criteria("createdDate").exists(),
query.criteria("createdDate").notEqual(null)
);
काम नहीं करेगा क्योंकि ऐसा लगता है कि आप नल पर क्वेरी करने में सक्षम नहीं हैं, लेकिन एक विशिष्ट मान के लिए क्वेरी कर सकते हैं।
हालाँकि, चूंकि आप केवल एक विशिष्ट मान के लिए क्वेरी कर सकते हैं, आप एक वैकल्पिक हल तैयार कर सकते हैं जहाँ आप createdDate
को अपडेट कर सकते हैं। दिनांक मान वाला फ़ील्ड जिसका उपयोग आपके मॉडल में कभी नहीं किया जाता है। उदाहरण के लिए, यदि आप दिनांक ऑब्जेक्ट को 0 से प्रारंभ करते हैं, तो इसे युग की शुरुआत, 1 जनवरी 1970 00:00:00 UTC पर सेट किया जाएगा। आपको मिलने वाले घंटे स्थानीयकृत समय ऑफसेट हैं। यह पर्याप्त होगा यदि आपके अपडेट में केवल मोंगो शेल में मेल खाने वाले तत्वों को संशोधित करना शामिल है, इसलिए यह इसी तरह दिखाई देगा:
db.users.update(
{"createdDate": null },
{ "$set": {"createdDate": new Date(0)} }
)
फिर आप फ्लुएंट इंटरफ़ेस का उपयोग कर सकते हैं उस विशिष्ट मूल्य पर क्वेरी करने के लिए:
Query<User> query = mongoDataStore
.find(User.class)
.field("createdDate").exists()
.field("createdDate").hasThisOne(new Date(0));
अपने मॉडल को परिभाषित करते समय एक प्रीपर्सिस्ट विधि शामिल करना बहुत आसान होगा जो createDate फ़ील्ड को अपडेट करता है। इस विधि को @PrePersist
. के साथ टैग किया गया है एनोटेशन ताकि दिनांक सहेजे जाने से पहले ऑर्डर पर सेट हो जाए। @PostPersist
. के लिए समतुल्य एनोटेशन मौजूद हैं , @PreLoad
और @PostLoad
।
@Entity(value="users", noClassNameStored = true)
public class User {
// Properties
private Date createdDate;
...
// Getters and setters
..
@PrePersist
public void prePersist() {
this.createdDate = (createdDate == null) ? new Date() : createdDate;
}
}