Karena MongoDB tidak memiliki konsep penggabungan, Anda perlu mengatasinya dengan mengurangi input Anda menjadi satu dokumen.
Jika Anda mengubah struktur dokumen Anda sehingga Anda menyimpan array tag, seperti berikut:
{id: 123, tag:["tag1","tag2","tag3"]}
{id: 456, tag:["tag1"]}
Anda dapat melakukan kueri seperti berikut:
db.user.find({$and:[{tag:"tag1"},{tag:"tag2"},{tag:"tag3"}]})
Jika diperlukan, Anda dapat menulis pengurangan peta untuk memancarkan larik tag untuk ID pengguna, sehingga Anda dapat melakukan kueri di atas.
Edit - Menyertakan pengurangan peta sederhana
Berikut ini adalah pengurangan peta yang sangat sederhana untuk mendapatkan input awal ke dalam format yang berguna untuk find
kueri yang diberikan di atas.
var map = function() {emit(this.id, {tag:[this.tag]});}
var reduce = function(key, values){
var result_array=[];
values.forEach(function(v1){
v1.tag.forEach(function(v2){
result_array.push(v2);
});
});
return {"tag":result_array};}
var op = db.user.mapReduce(map, reduce, {out:"mr_results"})
Kemudian Anda dapat melakukan kueri pada koleksi keluaran pengurangan peta, seperti berikut:
db.mr_results.find({$and:[{"value.tag":"tag1"},{"value.tag":"tag2"}, {"value.tag":"tag3"}]})