MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Прилагане на условие към множество документи за едно и също поле в MongoDB

Тъй като MongoDB няма концепция за обединения, трябва да работите върху това, като намалите въвеждането си до един документ.

Ако промените структурата на вашия документ, така че да съхранявате масив от тагове, като следното:

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

Можете да направите заявка като следната:

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

Ако е необходимо, можете да напишете map-reduce, за да излъчвате масив от тагове за потребителски идентификатор, така че да можете да направите горната заявка върху него.

Редактиране – Включително просто намаляване на картата

Ето едно наистина просто map-reduce, за да получите първоначалния вход във формат, който е полезен за find заявка, дадена по-горе.

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

След това можете да направите заявка в изходната колекция за намаляване на картата, като следното:

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да намерите всичко в mongoosejs?

  2. MongoDB група за агрегиране на поръчки/продажби Обща сума на месец + Поле за броене

  3. Mongodb C# драйвер Неподдържан филтър грешка с конкретен linq предикат

  4. PyMongo - избиране на поддокументи от колекция чрез регулярен израз

  5. Как да инсталирате MongoDB на Ubuntu 18.04