Fordi MongoDB ikke har et koncept om joinforbindelser, skal du arbejde på tværs af dette ved at reducere dit input til et enkelt dokument.
Hvis du ændrer din dokumentstruktur, så du gemmer en række tags, f.eks. følgende:
{id: 123, tag:["tag1","tag2","tag3"]}
{id: 456, tag:["tag1"]}
Du kan lave en forespørgsel som følgende:
db.user.find({$and:[{tag:"tag1"},{tag:"tag2"},{tag:"tag3"}]})
Hvis det er nødvendigt, kan du skrive et kort-reducere for at udsende en række tags til et bruger-id, så du kan udføre ovenstående forespørgsel på det.
Rediger - Inklusiv en simpel kort-reducering
Her er en virkelig enkel kort-reducering for at få det første input til et format, der er nyttigt til find
forespørgsel givet ovenfor.
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"})
Derefter kan du forespørge på map-reduce output-samlingen, som følgende:
db.mr_results.find({$and:[{"value.tag":"tag1"},{"value.tag":"tag2"}, {"value.tag":"tag3"}]})