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

Агрегирана заявка в Mongodb връща конкретно поле

Първото нещо, което правите погрешно тук, е да не разбирате как $project е предназначен да работи. Етапи на конвейера като $project и $group ще изведе само полетата, които са "изрично" идентифицирани. Така че само полетата, които казвате за извеждане, ще бъдат достъпни за следващите етапи на конвейера.

По-конкретно тук „проектирате“ само част от полето „u“ във вашия документ и следователно сте премахнали другите данни от достъпност. Единственото налично поле тук сега е „име“, което е това, което „прожектирате“.

Може би наистина сте имали намерението да направите нещо подобно:

db.collectiontmp.aggregate([
    { "$group": {
        "_id": {
           "_id": "$u._id",
           "email": { "$toUpper": "$u.e" }
        },
        "total": { "$sum": 1 },
    }},
    { "$project": {
        "_id": 0,
        "email": "$_id.email",
        "total": 1
    }},
    { "$sort": { "total": -1 } },
    { "$limit": 10 }
])

Или дори:

db.collectiontmp.aggregate([
    { "$group": {
        "_id": "$u._id",
        "email": { "$first": { "$toUpper": "$u.e" } }
        "total": { "$sum": 1 },
    }},
    { "$project": {
        "_id": 0,
        "email": 1,
        "total": 1
    }},
    { "$sort": { "total": -1 } },
    { "$limit": 10 }
])

Това ви дава вида резултат, който търсите.

Не забравяйте, че тъй като това е "тръбопровод", тогава само "изходът" от предходен етап е достъпен за "следващия" етап. Няма "глобална" концепция за документа, тъй като това не е декларативен израз като в SQL, а "тръбопровод".

Така че помислете за Unix тръба "|" команда или потърсете това по друг начин. Тогава вашето мислене ще си дойде на мястото.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Конфигурацията на обект трябва да бъде масив, съдържащ елемент от клас в yii2 с mongodb

  2. Грешка при активиране на криптиране на данни чрез локален ключ MONGODB

  3. Резултатът от заявката на Mongoose само за четене ли е?

  4. MongoDB - огромно количество нишки MongoCleaner

  5. не можете да актуализирате свойството createdAt в mongoose?