欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mongodb如何對(duì)文檔內(nèi)數(shù)組進(jìn)行過濾的方法步驟

 更新時(shí)間:2018年10月10日 09:52:00   作者:ZevFang  
這篇文章主要介紹了mongodb如何對(duì)文檔內(nèi)數(shù)組進(jìn)行過濾的方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

本文介紹了mongodb如何對(duì)文檔內(nèi)數(shù)組進(jìn)行過濾的方法步驟,分享給大家,具體如下:


mongodb文檔內(nèi)包含數(shù)組,需要將數(shù)組中符合條件的數(shù)據(jù)過濾出來并返回結(jié)果集,可以用兩種方式來查詢group或filter。
數(shù)據(jù)源:

{
  "_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數(shù)組中只包含is_query等于1的結(jié)果集(0的不包含)。

查詢語(yǔ)句:

方法一:使用$unwind將addrs數(shù)組打散,獲取結(jié)果集后用$match篩選符合條件的數(shù)據(jù),最后使用$group進(jìn)行聚合獲取最終結(jié)果集。

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過濾符合條件的根文檔結(jié)果集,然后使用$project返回對(duì)應(yīng)字段的同時(shí),在addrs數(shù)組中使用$filter進(jìn)行內(nèi)部過濾,返回最終結(jié)果集

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" : "深圳"
    }
  ]
}

相對(duì)于$group分組聚合返回結(jié)果集的方式,在當(dāng)前查詢要求下$filter顯得更加優(yōu)雅一些,也比較直接。當(dāng)然如果包含統(tǒng)計(jì)操作,比如要求返回is_query等于1的數(shù)量,這時(shí)候$group就非常合適了。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • MongoDB聚合運(yùn)算符$toBool詳解

    MongoDB聚合運(yùn)算符$toBool詳解

    $toBool聚合運(yùn)算符將指定的值轉(zhuǎn)換為布爾類型boolean,這篇文章主要介紹了MongoDB聚合運(yùn)算符:$toBool的相關(guān)知識(shí),需要的朋友可以參考下
    2024-05-05
  • MongoDB使用小結(jié):一些不常見的經(jīng)驗(yàn)分享

    MongoDB使用小結(jié):一些不常見的經(jīng)驗(yàn)分享

    最近一年忙碌于數(shù)據(jù)處理相關(guān)的工作,跟MongoDB打交道極多,以下為實(shí)踐過程中的Q&A,后續(xù)會(huì)不定期更新補(bǔ)充
    2017-03-03
  • Linux安裝MongoDB?4.0.3詳細(xì)步驟

    Linux安裝MongoDB?4.0.3詳細(xì)步驟

    這篇文章主要介紹了Linux安裝MongoDB?4.0.3詳細(xì)步驟的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • 最新評(píng)論