Как получить все ключи коллекции, которая содержит определенное (строковое) значение в mongodb

#mongodb #spring-boot #mongodb-query

#mongodb #spring-boot #mongodb-запрос

Вопрос:

Предположим, у меня есть коллекция, т.е. A.

Я хочу получить все ключи к этой коллекции, которые имеют определенное значение, т.е. «привет»

    {
      "a": "its me hello",
      "b": "it does not have value",
      "c": "It has hello"
   }
 

В этом случае я хочу запросить возврат ключей a и c. Который содержит строку «привет».

Есть ли какой-нибудь способ сделать это?

Или любой способ сделать это в spring boot?

Комментарии:

1. являются ли имя поля и номер поля в каждом объекте фиксированными?

2. Это может быть и то, и другое. Иногда исправлено. Иногда это невозможно исправить.

Ответ №1:

Вы можете сделать это, изменив данные в источнике данных с помощью objectToArray

Воспроизвести

 db.collection.aggregate([
  {
    "$project": {
      "data": {
        "$objectToArray": "$ROOT"
      }
    }
  },
  {
    $unwind: "$data"
  },
  {
    "$match": {
      "data.v": {
        $regex: "hello"
      }
    }
  }
])
 

Еще одна расширенная версия здесь
Он преобразует данные обратно

 db.collection.aggregate([
  {
    "$project": {
      "data": {
        "$objectToArray": "$ROOT"
      }
    }
  },
  {
    $unwind: "$data"
  },
  {
    "$match": {
      "data.v": {
        $regex: "hello"
      }
    }
  },
  {
    $group: {//Grouping back and restructuring the data so that objectToArray will bring the original format easily.
      "_id": "$_id",
      data: {
        "$addToSet": {
          k: "$data.k",
          v: "$data.v"
        }
      }
    }
  },
  {
    "$project": {
      "data": {
        "$arrayToObject": "$data"
      }
    }
  }
])
 

Обратитесь к документации arrayToObject и objectToArray , затем $regex

Комментарии:

1. Если вы можете мне помочь. как я могу использовать его в весенней загрузке. Это будет очень полезно.

2. К сожалению, я не такой эксперт в загрузке. Если вы попытаетесь отправить вопрос с помощью spring-boot, любой может помочь здесь.