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

Dopasuj dwa różne pola w Mongoose, Aggregate?

Możesz użyć następującej agregacji:

db.col.aggregate([
    {
        $addFields: {
            weightedIds: {
              $map:
                 {
                   input: "$weighted",
                   as: "w",
                   in: "$$w.phaseId"
                 }
            }
        }
    },
    {
      $project: {
        _id: 1,
        weighted: 1,
        phases: {
            $filter: {
             input: "$phases",
             as: "phase",
             cond: { $gte: [ { $indexOfArray: [ "$weightedIds" , "$$phase._id" ] }, 0 ] }
            }
        }
      }
    }
])

Używamy $map wziąć tylko phaseId pole weighted a następnie możemy odfiltrować phases przy użyciu $filter sprawdzanie dla każdej fazy, czy odpowiedni id istnieje (przy użyciu $indexOfArray co zwraca -1 w przeciwnym razie)




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB + aplikacja internetowa:baza danych na użytkownika

  2. Kompas wiosenny mongodb brak utworzonych danych/kolekcji

  3. Mongo MapReduce wybierz ostatnią datę

  4. Czy używanie mongo ObjectId jako identyfikatora użytkownika jest złą praktyką?

  5. Wykonywanie zapytań w MongoDB za pomocą znaków greckich przy użyciu JavaScript zwraca brak wyników