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

dopasowywanie pól wewnętrznie w mongodb

Jeśli to możliwe, sugeruję ustawienie warunku podczas przechowywania danych, aby można było szybko sprawdzić prawdziwość (isInStudentsList ). Wykonanie tego typu zapytania byłoby bardzo szybkie.

W przeciwnym razie istnieje stosunkowo złożony sposób wykorzystania potoku struktury agregacji do wykonania tego, co chcesz w jednym zapytaniu:

db.students.aggregate( 
    {$project: 
        {studentId: 1, studentIdComp: "$students.id"}},  
    {$unwind: "$studentIdComp"}, 
    {$project : { studentId : 1, 
        isStudentEqual: { $eq : [ "$studentId", "$studentIdComp" ] }}}, 
    {$match: {isStudentEqual: true}})

Biorąc pod uwagę przykład wprowadzania danych, wynik będzie następujący:

{
    "result" : [
         {
             "_id" : ObjectId("517b88decd483543a8bdd95b"),
             "studentId" : 23,
             "isStudentEqual" : true
         }
    ],
    "ok" : 1
}

Krótkie wyjaśnienie kroków:

  1. Zbuduj projekcję dokumentu za pomocą studentId i nowe pole z tablicą zawierającą tylko id (więc pierwszy dokument będzie zawierał [23, 55] .
  2. Korzystając z tej struktury, $unwind . To tworzy nowy tymczasowy dokument dla każdego elementu tablicy w studentIdComp tablica.
  3. Teraz weź te dokumenty i utwórz nową projekcję dokumentu, która nadal będzie miała studentId i dodaje nowe pole o nazwie isStudentEqual który porównuje równość dwóch pól, studentId i studentIdComp . Pamiętaj, że w tym momencie istnieje jeden tymczasowy dokument, który zawiera te dwa pola.
  4. Na koniec sprawdź, czy wartość porównania isStudentEqual jest prawdziwe i zwraca te dokumenty (które będą zawierać oryginalny dokument _id i studentId .
  5. Jeśli uczeń był na liście wiele razy, może być konieczne pogrupowanie wyników według studentId lub _id aby zapobiec duplikatom (ale nie wiem, czy tego potrzebujesz).


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Samouczek MongoDB dla początkujących (kompletny przewodnik) – Naucz się MongoDB w 15 minut

  2. MongoDB $addFields i $in łącznie

  3. Jak bezpośrednio zapytać o pole zagnieżdżone bez określania pola nadrzędnego?

  4. Model.find().toArray() twierdzący, że nie ma metody .toArray()

  5. jak zaktualizować i wstawić rekordy w php za pomocą mongodb