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

Използвайте агрегирането на MongoDB, за да намерите пресечна точка на два набора в един и същи документ

Не бяхте много далеч от пълното решение с рамка за агрегиране - имахте нужда от още нещо преди $group стъпка и това е нещо, което ще ви позволи да видите дали всички неща, които се използват, съвпадат с нещо, което е собственост.

Ето пълния конвейер

> db.house.aggregate(
       {'$unwind':'$uses'}, 
       {'$unwind':'$rooms'}, 
       {'$unwind':'$rooms.owns'}, 
       {$project:  { _id:0, 
                     houseId:1, 
                     uses:"$uses.name", 
                     isOkay:{$cond:[{$eq:["$uses.name","$rooms.owns.name"]}, 1, 0]}
                   }
       }, 
       {$group: { _id:{house:"$houseId",item:"$uses"}, 
                  hasWhatHeUses:{$sum:"$isOkay"}
                }
       },
       {$match:{hasWhatHeUses:0}})

и извеждането му във вашия документ

{
    "result" : [
        {
            "_id" : {
                "house" : 123,
                "item" : "sofa"
            },
            "hasWhatHeUses" : 0
        }
    ],
    "ok" : 1
}

Обяснение - след като разопаковате двата масива, сега искате да маркирате елементите, където използваният елемент е равен на притежавания елемент и да им дадете не-0 "резултат". Сега, когато прегрупирате нещата обратно по houseId, можете да проверите дали някои използвани артикули не са съвпаднали. Използването на 1 и 0 за резултат ви позволява да направите сума и сега съвпадение за елемент, който има сума 0, означава, че е бил използван, но не съответства на нищо в „притежаван“. Надявам се това да ви е харесало!



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Документно-ориентираните бази данни са предназначени да заменят релационни бази данни?

  2. Контейнерно управлявана MongoDB връзка в Liberty + Spring Data

  3. Какво означава да поставите работния комплект в RAM за MongoDB?

  4. Как се преобразува шестнадесетичен низ в число в mongodb?

  5. Как да използвате едно и също поле няколко пъти в заявка за търсене на MongoDB в NodeJS