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

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

熱門標(biāo)簽:老虎洗衣店地圖標(biāo)注 濟(jì)南電銷機(jī)器人加盟公司 怎么投訴地圖標(biāo)注 杭州人工電銷機(jī)器人價(jià)格 云南外呼系統(tǒng) 廣州長(zhǎng)安公司怎樣申請(qǐng)400電話 呼和浩特電銷外呼系統(tǒng)加盟 蘋果汽車租賃店地圖標(biāo)注 電銷機(jī)器人是什么軟件

本文介紹了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的不包含)。

查詢語句:

方法一:使用$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í)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 分布式文檔存儲(chǔ)數(shù)據(jù)庫之MongoDB訪問控制的操作方法
  • 分布式文檔存儲(chǔ)數(shù)據(jù)庫之MongoDB備份與恢復(fù)的實(shí)踐詳解
  • 分布式文檔存儲(chǔ)數(shù)據(jù)庫之MongoDB分片集群的問題
  • SpringDataMongoDB多文檔事務(wù)的實(shí)現(xiàn)
  • MongoDB中文檔的更新操作示例詳解
  • MongoDB數(shù)據(jù)庫文檔操作方法(必看篇)
  • mongodb 數(shù)據(jù)類型(null/字符串/數(shù)字/日期/內(nèi)嵌文檔/數(shù)組等)
  • PHP庫 查詢Mongodb中的文檔ID的方法
  • MongoDB如何更新多級(jí)文檔的數(shù)據(jù)

標(biāo)簽:玉林 雞西 自貢 無錫 遼陽 興安盟 廈門 泰安

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《mongodb如何對(duì)文檔內(nèi)數(shù)組進(jìn)行過濾的方法步驟》,本文關(guān)鍵詞  mongodb,如何,對(duì),文檔,內(nèi),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《mongodb如何對(duì)文檔內(nèi)數(shù)組進(jìn)行過濾的方法步驟》相關(guān)的同類信息!
  • 本頁收集關(guān)于mongodb如何對(duì)文檔內(nèi)數(shù)組進(jìn)行過濾的方法步驟的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章