sql >> Databasteknik >  >> NoSQL >> MongoDB

Tillämpa villkor på flera dokument för samma fält i MongoDB

Eftersom MongoDB inte har ett koncept för joins måste du arbeta med detta genom att minska din input till ett enda dokument.

Om du ändrar din dokumentstruktur så att du lagrar en rad taggar, som följande:

{id: 123,  tag:["tag1","tag2","tag3"]}
{id: 456,  tag:["tag1"]}

Du kan göra en fråga som följande:

db.user.find({$and:[{tag:"tag1"},{tag:"tag2"},{tag:"tag3"}]})

Om det behövs kan du skriva en map-reduce för att sända ut en rad taggar för ett användar-id, så att du kan göra ovanstående fråga på det.

Redigera – inklusive en enkel kartförminskning

Här är en riktigt enkel kartreducering för att få den initiala inmatningen till ett format som är användbart för find fråga ovan.

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

Sedan kan du fråga på kart-reducera utdatasamlingen, som följande:

db.mr_results.find({$and:[{"value.tag":"tag1"},{"value.tag":"tag2"}, {"value.tag":"tag3"}]})



  1. konvertera databas från mysql till mongoDb

  2. Streama från en mongodb-markör till Express-svar i node.js

  3. Infoga formulärvärde (json-format) i databasen med meteor

  4. Byt namn på ett fält i en MongoDB-samling