sql >> Database teknologi >  >> NoSQL >> MongoDB

Anvendelse af betingelse på flere dokumenter for det samme felt i MongoDB

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"}]})



  1. Spring-boot:mongoDB-datosammenligning virker ikke

  2. Mærkeligt svar, når man finder dokumenter i MongoDB ved hjælp af Mongoose i Node.js

  3. Hvordan konfigureres Redis-forbindelser med Rails 4, Puma og Sidekiq?

  4. Sådan bruges Redis Hashes