यदि आपके द्वारा उपयोग किए जाने वाले टैग और उनके संबंधित स्लग बदलने की संभावना नहीं है, तो मुझे लगता है कि आपका दूसरा दृष्टिकोण बेहतर है। हालांकि मैं एक छोटे से बदलाव का सुझाव दूंगा - [name, slug]
की एक सरणी को संग्रहीत करने के बजाय , इस उदाहरण में टैग उप-दस्तावेज़ बनाकर फ़ील्ड को स्पष्ट करें post
दस्तावेज़:
{
"_id" : ObjectId("4ee33229d8854784468cda7e"),
"title" : "My Post",
"content" : "This is a post with some tags",
"tags" : [
{
"name" : "meta",
"slug" : "34589734"
},
{
"name" : "post",
"slug" : "34asd97x"
},
]
}
फिर आप डॉट नोटेशन . का उपयोग करके किसी विशेष टैग वाली पोस्ट के लिए क्वेरी कर सकते हैं इस तरह:
db.test.find({ "tags.name" : "meta"})
क्योंकि tags
एक सरणी है, मोंगो पूरी तरह से सरणी के बजाय सरणी के किसी भी तत्व के खिलाफ क्वेरी से मेल खाने के लिए पर्याप्त चालाक है, और डॉट-नोटेशन आपको किसी विशेष फ़ील्ड के विरुद्ध मिलान करने की अनुमति देता है।
पोस्ट के लिए क्वेरी करने के लिए नहीं एक विशिष्ट टैग युक्त, $ne
. का उपयोग करें :
db.test.find({ "tags.name" : { $ne : "fish" }})
और एक टैग वाली पोस्ट के लिए क्वेरी करने के लिए लेकिन दूसरे को नहीं, $and
. का उपयोग करें :
db.test.find({ $and : [{ "tags.name" : { $ne : "fish"}}, {"tags.name" : "meta"}]})
आशा है कि यह मदद करेगा!