如何在mongodb查询中获取单个字段?

Posted

技术标签:

【中文标题】如何在mongodb查询中获取单个字段?【英文标题】:How to get single field in mongodb query? 【发布时间】:2022-01-17 13:31:55 【问题描述】:

我有这样的数据:

 id : 1, 
    book: "Flash", 
    chapters: [
         
      chap_no: "1", 
      sub_chapter: [
                sub_no: 1, description: "<description>"
                ,
                sub_no: 2, description: "<description>"
                ,
            ]
        
    ]

我想根据 book -> chapter_no -> sub_no 显示一个像这样的字段


 sub_no: 2, description: "<description>"

在 mongodb 查询中。

【问题讨论】:

【参考方案1】:

你可以这样做

db.collection.aggregate([
  
    "$match": 
      $and: [
        
          "book": "Flash3"
        ,
        
          "chapters.chap_no": "2"
        ,
        
          "chapters.sub_chapter.sub_no": "1"
        
      ]
    
  ,
  
    "$unwind": "$chapters"
  ,
  
    "$unwind": "$chapters.sub_chapter"
  ,
  
    "$match": 
      $and: [
        
          "book": "Flash3"
        ,
        
          "chapters.chap_no": "2"
        ,
        
          "chapters.sub_chapter.sub_no": "1"
        
      ]
    
  ,
  
    "$replaceRoot": 
      "newRoot": "$chapters.sub_chapter"
    
  
])

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。【参考方案2】: $match $unwind $unwind $match $replaceRoot
db.collection.aggregate([
  
    "$match": 
      "chapters.sub_chapter.sub_no": 2
    
  ,
  
    "$unwind": "$chapters"
  ,
  
    "$unwind": "$chapters.sub_chapter"
  ,
  
    "$match": 
      "chapters.sub_chapter.sub_no": 2
    
  ,
  
    "$replaceRoot": 
      "newRoot": "$chapters.sub_chapter"
    
  
])

mongoplayground

【讨论】:

以上是关于如何在mongodb查询中获取单个字段?的主要内容,如果未能解决你的问题,请参考以下文章

如何在mongodb查询中获取单个字段?

mongodb查询,如何只查询出某一个字段的值?

用PHP查询mongo数据时,条件是某个字段(A为数组)不为空,但是有的记录中并没有字段A,这个条件怎么写?

如何在 mongoDb 中按多个字段排序

Mongodb如何获取单个文档的大小?

Mongo 查询(可视化工具)