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

Сравнете масиви и върнете разликата

Единствените неща, които "модифицират" документа в отговор са .aggregate() и .mapReduce() , където първото е по-добрият вариант.

В този случай вие искате $setDifference който сравнява "наборите" и връща "разликата" между двете.

Така представяне на документ с вашия масив:

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

Стартирайте агрегирането:

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

Което връща:

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

Ако не искате "набори" и вместо това искате да предоставите масив като [2,3,4,4] след това можете да сравните с $filter и $in вместо това, ако имате поне MongoDB 3.4:

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

Или с $filter и $anyElementTrue в по-ранни версии:

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

Където и двамата биха се върнали:

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

Което разбира се "не е набор" от 4 е предоставен като вход "два пъти" и следователно се връща и "два пъти".




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Планиране и управление на схеми в MongoDB (дори въпреки че е безсхемно)

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

  3. 5 начина да получите час от дата в MongoDB

  4. Индексът на полето ts в oplog.rs не се актуализира

  5. Pymongo / MongoDB:създаване на индекс или осигуряване на индекс?