【问题标题】:How to get all keys of collection that contains certain(String) value in mongodb如何在mongodb中获取包含某些(字符串)值的集合的所有键
【发布时间】:2021-04-19 10:28:00
【问题描述】:

假设我有一个集合,即 A.

我想获取此集合中所有具有特定值的键,即“hello”

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

在这种情况下,我想查询返回 a 和 c 键。其中包含字符串“hello”。

有什么办法吗?

或者在 Spring Boot 中有什么方法可以做到这一点?

【问题讨论】:

  • 每个对象中的字段名和字段数是固定的吗?
  • 两者都可以。有时固定。有时无法修复。

标签: mongodb spring-boot mongodb-query


【解决方案1】:

您可以通过使用objectToArray 重塑数据源中的数据来做到这一点

Play

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

又一个进阶版here 它将数据重新整形

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"
      }
    }
  }
])

参考arrayToObjectobjectToArray的文档,然后参考$regex

【讨论】:

  • 如果你能帮助我。我如何在 Spring Boot 中使用它。这将非常有帮助。
  • 不幸的是,我不是引导方面的专家。如果您尝试使用 spring-boot 发布问题,任何人都可以在这里提供帮助。
猜你喜欢
  • 2021-04-20
  • 2014-03-27
  • 1970-01-01
  • 2020-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-18
相关资源
最近更新 更多