根据嵌套对象字段的长度查找所有文档

Posted

技术标签:

【中文标题】根据嵌套对象字段的长度查找所有文档【英文标题】:Find all document based on length of nested object field 【发布时间】:2021-11-15 18:26:48 【问题描述】:

我有以下文件:


usera:
    data: 
        order1: "data",
        order2: "data2",
        order3: "data3",
    
,
userb:
    data: 
        order1: "data",
        order2: "data2",
    
,
userc:
    data: 
        order1: "data",
        order3: "data3",
    
,
userd:
    data: 
        order1: "data",
        order2: "data2",
        order3: "data3",
    
,
usere:
    data: 
        order1: "data"
    


我想查询只有order1而没有其他order2或其他文档可用的文档。

例如只有usere是一个有order1的文档,其他的都不存在。

无论如何,我可以在哪里检查我的 data 字段的长度,如果它是 1 并且 order1 $existstrue

【问题讨论】:

【参考方案1】:

我认为下面的代码就是你要找的

db.collection.aggregate([
  
    "$match": 
      "$expr": 
        "$eq": [
          
            "$let": 
              "vars": 
                "orderElem": 
                  "$objectToArray": "$user.data"
                ,
                
              ,
              "in": "$$orderElem.k"
            ,
            
          ,
          [
            "order1"
          ],
          
        ],
        
      
    ,
    
  
])

MongoPlayground Example

【讨论】:

以上是关于根据嵌套对象字段的长度查找所有文档的主要内容,如果未能解决你的问题,请参考以下文章

如何根据数组字段的长度对文档进行排序

如何在bigquery中获取重复嵌套字段的长度

重构许多嵌套 if 或链式 if 语句

python根据序列长度筛选序列,查找序列中指定碱基序列

查找长度小于或等于 L 的 n 的所有分区

Postgres 9.5 - 查询嵌套 JSON 元素的数组长度