摘要:北京深圳方法二使用過濾符合條件的根文檔結果集,然后使用返回對應字段的同時,在數組中使用進行內部過濾,返回最終結果集北京深圳相對于分組聚合返回結果集的方式,在當前查詢要求下顯得更加優雅一些,也比較直接。
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進行聚合獲取最終結果集。
db.getCollection("user").aggregate( [ { $unwind: "$addrs" }, { $match : { "uid":"1000001", "addrs.is_query": "1" } }, { $group : { "_id" : "$uid", "addrs": { $push: "$addrs" } } } ] )
Result:
{ "_id" : "1000001", "addrs" : [ { "is_query" : "1", "city" : "北京" }, { "is_query" : "1", "city" : "深圳" } ] }
方法二:使用$match過濾符合條件的根文檔結果集,然后使用$project返回對應字段的同時,在addrs數組中使用$filter進行內部過濾,返回最終結果集
db.getCollection("user").aggregate( [ { $match : { "uid": "1000001" } }, { $project: { "uid": 1, "name": 1, "addrs": { $filter: { input: "$addrs", as: "item", cond: { $eq : ["$$item.is_query","1"] } } } } } ] )
Result:
{ "_id" : ObjectId("5bbcc0c9a74db9804e78a157"), "uid" : "1000001", "name" : "zhangsan", "addrs" : [ { "is_query" : "1", "city" : "北京" }, { "is_query" : "1", "city" : "深圳" } ] }
相對于$group分組聚合返回結果集的方式,在當前查詢要求下$filter顯得更加優雅一些,也比較直接。當然如果包含統計操作,比如要求返回is_query等于1的數量,這時候$group就非常合適了。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/19381.html
摘要:但有時我們希望返回與查詢條件相匹配的任意一個數組元素。首先,可以使用要求同時使用查詢條件中的兩個語句與一個數組元素進行比較。 上一篇文章:MongoDB指南---7、find簡介與查詢條件下一篇文章:MongoDB指南---9、游標與數據庫命令 如第2章所述,MongoDB的文檔可以使用多種類型的數據。其中有一些在查詢時會有特別的表現。 4.3.1 null null類型的行為有點奇...
摘要:但有時我們希望返回與查詢條件相匹配的任意一個數組元素。首先,可以使用要求同時使用查詢條件中的兩個語句與一個數組元素進行比較。 上一篇文章:MongoDB指南---7、find簡介與查詢條件下一篇文章:MongoDB指南---9、游標與數據庫命令 如第2章所述,MongoDB的文檔可以使用多種類型的數據。其中有一些在查詢時會有特別的表現。 4.3.1 null null類型的行為有點奇...
摘要:下面列出了使用作為文件存儲的理由。如果已經在使用,那么可以使用來代替獨立的文件存儲工具。在中,文件存儲的集中度會比較高,因為是以為單位來分配數據文件的。揭開的面紗是一種輕量級的文件存儲規范,用于存儲中的普通文檔。 上一篇文章:MongoDB指南---14、特殊的索引和集合:固定集合、TTL索引、全文本索引下一篇文章:MongoDB指南---16、聚合 地理空間索引 MongoDB支持...
摘要:下面列出了使用作為文件存儲的理由。如果已經在使用,那么可以使用來代替獨立的文件存儲工具。在中,文件存儲的集中度會比較高,因為是以為單位來分配數據文件的。揭開的面紗是一種輕量級的文件存儲規范,用于存儲中的普通文檔。 上一篇文章:MongoDB指南---14、特殊的索引和集合:固定集合、TTL索引、全文本索引下一篇文章:MongoDB指南---16、聚合 地理空間索引 MongoDB支持...
摘要:操作花費的時間,單位是毫秒。處理完成后,會自動將臨時集合的名字更改為你指定的集合名,這個重命名的過程是原子性的。作用域在這些函數內部是不變的。上一篇文章指南聚合下一篇文章指南聚合命令 上一篇文章:MongoDB指南---16、聚合下一篇文章:MongoDB指南---18、聚合命令 MapReduce是聚合工具中的明星,它非常強大、非常靈活。有些問題過于復雜,無法使用聚合框架的查詢語言...
閱讀 2479·2021-11-16 11:45
閱讀 2450·2021-10-11 10:59
閱讀 2255·2021-10-08 10:05
閱讀 3835·2021-09-23 11:30
閱讀 2375·2021-09-07 09:58
閱讀 806·2019-08-30 15:55
閱讀 778·2019-08-30 15:53
閱讀 1928·2019-08-29 17:00