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

извлича стойност на подмасив в mongodb

Имате някакъв синтаксис в оригиналния си пример, който вероятно не прави това, което очаквате .. т.е. изглежда, че намерението ви е било да съпоставите резултати само за определен тип („изпит“ във вашия пример, „тест“ според вашето описание ).

По-долу са някои примери за използване на обвивката на MongoDB 2.2.

$elemMatch проекция

Можете да използвате проекцията $elemMatch за връщане на първия съответстващ елемент в масив:

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

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

Резултатът ще бъде съвпадащият елемент от масива за всеки документ, напр.:

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

Рамка за агрегиране

Ако искате да покажете повече от една съответстваща стойност или да промените формата на резултатния документ, вместо да върнете пълния съответстващ елемент на масива, можете да използвате Aggregation Framework :

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

Резултатът в този случай включва:

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Сравнете две полета на масив в един и същи документ

  2. MongoDB Aggregation:добавете поле от вграден документ чрез път на динамично поле

  3. MongoDB $sample

  4. Как да сортирате документи въз основа на дължината на поле от масив

  5. MongoDump заявка с BinData