- 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下依据数组年夜小进行查询的办法