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

Извличане на поддокументи, които съответстват на максималната стойност в масива

Най-добрият начин да направите това е в MongoDB 3.2 или по-нова. Трябва да $project нашите документи и използвайте $filter оператор за връщане на подмножество от масива "topicInfo", което отговаря на нашето условие. И от MongoDB3.2 можем да използваме $max в $project етап в cond ition израз и извършване на логическа операция върху върнатата стойност.

Последният етап в процеса е $match етап, където филтрирате тези документи с празен "topicInfo", като използвате $exists елементен оператор на заявка и точкова нотация за достъп до първия елемент в масива. Това също намалява както количеството данни, изпратени по кабела, така и времето и паметта, използвани за декодиране на документи от страна на клиента.

db.collection.aggregate([
    { "$project": { 
        "topicInfo": { 
            "$filter": { 
                "input": "$topicInfo", 
                "as": "t", 
                "cond": { 
                    "$and": [ 
                        { "$eq": [ "$$t.topic", "topic2"] }, 
                        { "$eq": [ "$$t.time", { "$max": "$topicInfo.time" } ] }
                    ] 
                } 
            } 
        } 
    }},
    { "$match": { "topicInfo.0": { "$exists": true } } }
])


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да създадете вложен индекс в MongoDB?

  2. намиране на документи за подмасив в meteor

  3. не може да компилира пример за mongo-c-драйвер

  4. Как да търсите запис и след това да го изтриете

  5. Свързване към MongoDB Atlas от функции на firebase