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

Агрегиране и намаляване на вложен масив въз основа на ObjectId

Можете да използвате $filter с $map за преоформяне на вашите данни и филтриране по _id . След това можете да продължите да използвате $push с $ifNull за предоставяне на стойност по подразбиране, ако масивът е празен:

db.collection.aggregate([
    {
        $addFields: {
            employeeResponses: {
                $map: {
                    input: {
                        $filter: {
                            input: "$employeeResponses",
                            cond: {
                                $eq: [ "$$this._id", "5d978d372f263f41cc624727"]
                            }
                        }
                    },
                    in: "$$this.response"
                }
            }
        }
    },
    {
        $group: {
            _id: null,
            responses: { $push: { $ifNull: [ { $arrayElemAt: [ "$employeeResponses", 0 ] }, "No response" ] } }
        }
    }
])

Mongo Playground




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongodb (v2.4.0) $match агрегат не работи с период от време

  2. Съхранявайте данни за местоположение в документ Mongodb

  3. потребителски _id полета Django MongoDB MongoEngine

  4. Как да използвам $and оператор в mongodb - java драйвер

  5. сортиране на масив в заявка и проектиране на всички полета