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

wyodrębnij wartość podtablicy w mongodb

W oryginalnym przykładzie masz pewną składnię, która prawdopodobnie nie spełnia oczekiwań, to znaczy wygląda na to, że Twoim zamiarem było dopasowanie wyników tylko dla określonego typu (w przykładzie „egzamin”, „quiz” według opisu ).

Poniżej znajduje się kilka przykładów użycia powłoki MongoDB 2.2.

$elemMatch projekcja

Możesz użyć projekcja $elemMatch aby zwrócić pierwszy pasujący element w tablicy:

db.students.find(
    // Search criteria
    { '_id': 22 },

    // Projection
    { _id: 0, scores: { $elemMatch: { type: 'exam' } }}
)

Wynikiem będzie pasujący element tablicy dla każdego dokumentu, np.:

{ "scores" : [ { "type" : "exam", "score" : 75.04996547553947 } ] }

Struktura agregacji

Jeśli chcesz wyświetlić więcej niż jedną pasującą wartość lub zmienić kształt dokumentu wynikowego zamiast zwracać pełny pasujący element tablicy, możesz użyć Struktura agregacji :

db.students.aggregate(
    // Initial document match (uses index, if a suitable one is available)
    { $match: {
        '_id': 22, 'scores.type' : 'exam'
    }},

    // Convert embedded array into stream of documents
    { $unwind: '$scores' },

    // Only match scores of interest from the subarray
    { $match: {
        'scores.type' : 'exam'
    }},

    // Note: Could add a `$group` by _id here if multiple matches are expected

    // Final projection: exclude fields with 0, include fields with 1
    { $project: {
        _id: 0,
        score: "$scores.score"
    }}
)

Wynik w tym przypadku obejmuje:

{ "result" : [ { "score" : 75.04996547553947 } ], "ok" : 1 }



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jaka jest różnica między tymi dwoma zapytaniami MongoDB?

  2. Sharding MongoDB, jak zmienia równowagę podczas dodawania nowych węzłów?

  3. Zapisz wiele plików graficznych za pomocą widgetu Kartik FileInput

  4. Mongoid usuwa wiele z limitem

  5. MongoDB filtruje wiele poddokumentów