MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Porównaj tablice i zwróć różnicę

Jedyne rzeczy, które „modyfikują” dokument w odpowiedzi to .aggregate() i .mapReduce() , gdzie ta pierwsza opcja jest lepszą opcją.

W takim przypadku prosisz o $setDifference który porównuje „zestawy” i zwraca „różnicę” między nimi.

Reprezentowanie dokumentu za pomocą tablicy:

db.collection.insert({ "b": [1, 3, 5, 6, 7, 10] })

Uruchom agregację:

db.collection.aggregate([{ "$project": { "c": { "$setDifference": [ [2,3,4], "$b" ] } } }])

Który powraca:

{ "_id" : ObjectId("596005eace45be96e2cb221b"), "c" : [ 2, 4 ] }

Jeśli nie chcesz „zestawów”, a zamiast tego chcesz dostarczyć tablicę, taką jak [2,3,4,4] następnie możesz porównać z $filter i $in zamiast tego, jeśli masz MongoDB 3.4 przynajmniej:

db.collection.aggregate([
  { "$project": {
    "c": {
      "$filter": {
        "input": [2,3,4,4],
        "as": "a",
        "cond": {
          "$not": { "$in": [ "$$a", "$b" ]  }
        }
      }
    }   
  }}
])

Lub za pomocą $filter i $anyElementTrue we wcześniejszych wersjach:

db.collection.aggregate([
  { "$project": {
    "c": {
      "$filter": {
        "input": [2,3,4,4],
        "as": "a",
        "cond": {
          "$not": {
            "$anyElementTrue": {
              "$map": {
                "input": "$b",
                "as": "b",
                "in": {
                  "$eq": [ "$$a", "$$b" ]    
                }
              }    
            }
          }
        }    
      }
    }    
  }}
])

Gdzie obaj wrócą:

{ "_id" : ObjectId("596005eace45be96e2cb221b"), "c" : [ 2, 4, 4 ] }

Co oczywiście nie jest „zestawem”, ponieważ 4 został podany jako wejście "dwa razy" i dlatego jest również zwracany "dwa razy".




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $toBool

  2. MongoDB $istnieje

  3. Pomóż zdefiniować niesamowite narzędzie MongoDB GUI

  4. Utwórz indeks wielokluczowy w MongoDB

  5. Bazy danych dokumentów:nadmiarowe dane, referencje itp. (w szczególności MongoDB)