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

MongoDB Aggregation :Двойно търсене и обединяване на отговор за търсене към съответния обект

Опитайте тази заявка:

db.companies.aggregate([
    { $match: { _id: companyId } },
    { $unwind: "$professionals_customers" },
    {
        $lookup: {
            from: "companies",
            localField: "professionals_customers.company",
            foreignField: "_id",
            as: "professionals_customers.company"
        }
    },
    {
        $lookup: {
            from: "users",
            localField: "professionals_customers.contact",
            foreignField: "_id",
            as: "professionals_customers.contact"
        }
    },
    {
        $addFields: {
            "professionals_customers.company": {
                $arrayElemAt: ["$professionals_customers.company", 0]
            },
            "professionals_customers.contact": {
                $arrayElemAt: ["$professionals_customers.contact", 0]
            }
        }
    },
    {
        $group: { _id: "$_id", professionals_customers: { $push: "$professionals_customers" }, data: { $first: "$$ROOT" } }
    },
    { $addFields: { "data.professionals_customers": "$professionals_customers" } },
    { $replaceRoot: { newRoot: "$data" } }
])

Тест: MongoDB-Playground

Забележка: Ако е необходимо, трябва да конвертирате полета/въведени данни, които са от тип низ към ObjectId() . Основното нещо е, че трябва да проверите типовете на две полета, които се сравняват, или съвпаденията между въвеждане и поле в база данни.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Срез от хранилище на Spring Mongo

  2. Mongoose + lodash неправилно разширява копирания масив от обект

  3. грешка при импортиране на pymongo ubuntu

  4. Многоезично моделиране на данни в MongoDB

  5. Преобразуване на DateTime в UTC в моето местно време?