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

Mongodb търсене масив от елементи с комбиниран резултат

Трябва да стартирате това картографиране извън $lookup като стартирате $map заедно с $arrayElemAt за да получите единична двойка от двата масива и след това да приложите $mergeObjects за да получите един обект като резултат:

db.Order.aggregate([
    {
        $lookup: {
            from: "products",
            localField: "context.products.id",
            foreignField: "_id",
            as: "productDetails"
        }
    },
    {
        $addFields: {
            productDetails: {
                $map: {
                    input: "$productDetails",
                    in: {
                        _id: "$$this._id",
                        name: "$$this.context.name"
                    }
                }
            }
        }
    },
    {
        $project: {
            _id: 1,
            "context.products": {
                $map: {
                    input: "$context.products",
                    as: "prod",
                    in: {
                        $mergeObjects: [
                            "$$prod",
                            { $arrayElemAt: [ { $filter: { input: "$productDetails", cond: { $eq: [ "$$this._id", "$$prod.id" ] } } }, 0 ] }
                        ]
                    }
                }
            }
        }
    }
])

Mongo Playground

Целите на последната стъпка е да се вземат два масива:products и productDetails (изходът от $lookup ) и намерете съвпадения между тях. Знаем, че винаги има едно съвпадение, така че можем да получим само един елемент $arrayElemAt 0 . Като резултат от $map ще има единичен масив, съдържащ "обединени" документи.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Намерете документ на mongodb, като използвате частичен низ _id

  2. пребройте полето на поддокумент и общата сума в mongodb

  3. Вземете най-новия запис от колекцията на mongodb

  4. Как да конструирам заявка за актуализиране на документ с вложен масив в mongo?

  5. Как да запазя нулеви стойности в края на сортирането в Mongoose?