कहेंगे Map-Reduce
का उपयोग करें एक अलग संग्रह बनाने के लिए जो genre
. को संग्रहीत करता है स्प्लिट कॉमा से अलग स्ट्रिंग से आने वाले मानों के साथ एक सरणी के रूप में, जिसे आप मैप-रिड्यूस जॉब चला सकते हैं और आउटपुट संग्रह पर प्रश्नों को प्रशासित कर सकते हैं।
उदाहरण के लिए, मैंने foo
. में कुछ नमूना दस्तावेज़ बनाए हैं संग्रह:
db.foo.insert([
{genre: 'Action, Adventure, Sci-Fi'},
{genre: 'Thriller, Romantic'},
{genre: 'Comedy, Action'}
])
निम्नलिखित मानचित्र/संचालन को कम करने से उस संग्रह का निर्माण होगा जिससे आप निष्पादक प्रश्नों को लागू कर सकते हैं:
map = function() {
var array = this.genre.split(/\s*,\s*/);
emit(this._id, array);
}
reduce = function(key, values) {
return values;
}
result = db.runCommand({
"mapreduce" : "foo",
"map" : map,
"reduce" : reduce,
"out" : "foo_result"
});
क्वेरी करना आसान होगा, value
. पर एक बहु-कुंजी अनुक्रमणिका के साथ प्रश्नों का लाभ उठाना होगा फ़ील्ड:
db.foo_result.createIndex({"value": 1});
var genre = ['Action', 'Adventure'];
db.foo_result.find({'value': {'$in': genre}})
आउटपुट :
/* 0 */
{
"_id" : ObjectId("55842af93cab061ff5c618ce"),
"value" : [
"Action",
"Adventure",
"Sci-Fi"
]
}
/* 1 */
{
"_id" : ObjectId("55842af93cab061ff5c618d0"),
"value" : [
"Comedy",
"Action"
]
}