如何在mongodb中获取包含某些(字符串)值的集合的所有键

Posted

技术标签:

【中文标题】如何在mongodb中获取包含某些(字符串)值的集合的所有键【英文标题】:How to get all keys of collection that contains certain(String) value in 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 中有什么方法可以做到这一点?

【问题讨论】:

每个对象中的字段名和字段数是固定的吗? 两者都可以。有时固定。有时无法修复。 【参考方案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 发布问题,任何人都可以在这里提供帮助。

以上是关于如何在mongodb中获取包含某些(字符串)值的集合的所有键的主要内容,如果未能解决你的问题,请参考以下文章

如果Set包含具有某些字符串值的对象,如何检入java?

如何从对象数组中获取具有属性的列表,除非它包含具有特定值的另一个项目?

Java 8:如何从包含为映射值的列表中获取值?

如何在不实际替换代码中的值的情况下获取与某些坐标对应的函数值?

Postgresql:如何查询包含某些值的 JSONb 数组

如何获取某些值的值作为类型<String>,它位于 Dart/Flutter 中 List 内的 Map 内?