mongodb如何对文档内数组进行过滤的方法步骤

  • A+
所属分类:MongoDB

本文先容了mongodb若何对文档内数组进行过滤的办法步调,分享给年夜家,详细如下:

mongodb文档内包括数组,必要将数组中相符前提的数据过滤出来并返回成果集,可以用两种方式来查询group或filter。
数据源:

{
  "大众_id"大众 : ObjectId("大众5bbcc0c9a74db9804e78a157"大众),
  "大众uid"大众 : "大众1000001"大众,
  "大众name"大众 : "大众zhangsan"大众,
  "大众addrs"大众 : [ 
    {
      "大众is_query"大众 : "大众1"大众,
      "大众city"大众 : "大众北京"大众
    }, 
    {
      "大众is_query"大众 : "大众0"大众,
      "大众city"大众 : "大众上海"大众
    }, 
    {
      "大众is_query"大众 : "大众1"大众,
      "大众city"大众 : "大众深圳"大众
    }
  ]
}
{
  "大众_id"大众 : ObjectId("大众5bbcc167a74db9804e78a172"大众),
  "大众uid"大众 : "大众1000002"大众,
  "大众name"大众 : "大众lisi"大众,
  "大众addrs"大众 : [ 
    {
      "大众is_query"大众 : "大众0"大众,
      "大众city"大众 : "大众北京"大众
    }, 
    {
      "大众is_query"大众 : "大众0"大众,
      "大众city"大众 : "大众上海"大众
    }, 
    {
      "大众is_query"大众 : "大众1"大众,
      "大众city"大众 : "大众深圳"大众
    }
  ]
}

要求查询指定uid下,addrs数组中只包括is_query即是1的成果集(0的不包括)。

查询语句:

办法一:使用$unwind将addrs数组打散,获取成果集后用$match筛选相符前提的数据,末了使用$group进行聚合获取终极成果集。

Result:

{
  "大众_id"大众 : "大众1000001"大众,
  "大众addrs"大众 : [ 
    {
      "大众is_query"大众 : "大众1"大众,
      "大众city"大众 : "大众北京"大众
    }, 
    {
      "大众is_query"大众 : "大众1"大众,
      "大众city"大众 : "大众深圳"大众
    }
  ]
}

办法二:使用$match过滤相符前提的根文档成果集,然后使用$project返回对应字段的同时,在addrs数组中使用$filter进行内部过滤,返回终极成果集

Result:

{
  "大众_id"大众 : ObjectId("大众5bbcc0c9a74db9804e78a157"大众),
  "大众uid"大众 : "大众1000001"大众,
  "大众name"大众 : "大众zhangsan"大众,
  "大众addrs"大众 : [ 
    {
      "大众is_query"大众 : "大众1"大众,
      "大众city"大众 : "大众北京"大众
    }, 
    {
      "大众is_query"大众 : "大众1"大众,
      "大众city"大众 : "大众深圳"大众
    }
  ]
}

相对付$group分组聚合返回成果集的方式,在当前查询要求下$filter显得加倍优雅一些,也比拟直接。当然假如包括统计操作,好比要求返回is_query即是1的数目,这时刻$group就异常适宜了。

以上便是本文的全体内容,愿望对年夜家的进修有所赞助,也愿望年夜家多多支撑剧本之家。

您可能感兴致的文章:

MongoDB若何对数组中的元素进行查询详解mongoDB 多重数组查询(AngularJS绑定显示 nodejs)mongodb 数据类型(null/字符串/数字/日期/内嵌文档/数组等)MongoDB下依据数组年夜小进行查询的办法

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: