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

Как да намерите конкретни вложени обекти, без да знаете родителския ключ в mongodb

Можете да използвате $objectToArray (mongoDB 3.4.4 и по-нова), $filter и $project и да получите нещо като това:

db.collection.aggregate([
  {
    $project: {
      obj: {
        $objectToArray: "$info"
      }
    }
  },
  {
    $project: {
      _id: 0,
      obj: {
        $filter: {
          input: "$obj",
          as: "item",
          cond: {
            $eq: [
              "$$item.v.city",
              "NY"
            ]
          }
        }
      }
    }
  },
  {
    $project: {
      info: {
        $arrayToObject: "$obj"
      }
    }
  },
])

Можете да го видите работещ тук

Идеята е да разделите обекта на масив, да го филтрирате и след това да преобразувате този масив обратно в обект.

Филтрирах по city но съм сигурен, че разбирате идеята.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB схема за съхраняване на хронологията на местоположението на потребителя

  2. Ограничаване на размера на съхранение в MongoDB?

  3. Как да създадете потребител в mongodb с docker-compose

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

  5. Парола и потребителско име за MongoDb и morphia