Katakanlah gunakan Map-Reduce
untuk membuat koleksi terpisah yang menyimpan genre
sebagai larik dengan nilai yang berasal dari string yang dipisahkan koma, yang kemudian Anda dapat menjalankan tugas Pengurangan Peta dan mengelola kueri pada kumpulan keluaran.
Misalnya, saya telah membuat beberapa contoh dokumen ke foo
koleksi:
db.foo.insert([
{genre: 'Action, Adventure, Sci-Fi'},
{genre: 'Thriller, Romantic'},
{genre: 'Comedy, Action'}
])
Operasi peta/pengurangan berikut kemudian akan menghasilkan koleksi yang darinya Anda dapat menerapkan kueri berkinerja:
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"
});
Kueri akan mudah, memanfaatkan kueri dengan indeks multi-kunci pada value
bidang:
db.foo_result.createIndex({"value": 1});
var genre = ['Action', 'Adventure'];
db.foo_result.find({'value': {'$in': genre}})
Keluaran :
/* 0 */
{
"_id" : ObjectId("55842af93cab061ff5c618ce"),
"value" : [
"Action",
"Adventure",
"Sci-Fi"
]
}
/* 1 */
{
"_id" : ObjectId("55842af93cab061ff5c618d0"),
"value" : [
"Comedy",
"Action"
]
}