真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MongoDB中如何操作管道操

MongoDB中如何操作管道操,針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

創(chuàng)新互聯(lián)是一家朝氣蓬勃的網(wǎng)站建設(shè)公司。公司專注于為企業(yè)提供信息化建設(shè)解決方案。從事網(wǎng)站開發(fā),網(wǎng)站制作,網(wǎng)站設(shè)計(jì),網(wǎng)站模板,微信公眾號開發(fā),軟件開發(fā),微信平臺(tái)小程序開發(fā),十載建站對成都宴會(huì)酒店設(shè)計(jì)等多個(gè)領(lǐng)域,擁有豐富建站經(jīng)驗(yàn)。

$match

match中都可以使用,比如獲取集合中所有author為”杜甫”的文檔,如下:

db.sang_collect.aggregate({$match:{author:"杜甫"}})

我們在實(shí)際使用時(shí)最好將match還可以用索引。

$project

基本用法

$project可以用來提取想要的字段,如下:

db.sang_collect.aggregate({$project:{title:1,_id:0}})

1表示要該字段,0表示不要該字段,也可以對返回的字段進(jìn)行重命名,比如將title改為articleTitle,如下:

db.sang_collect.aggregate({$project:{"articleTitle":"$title"}})

不過這里有一個(gè)問題需要注意,如果原字段上有索引,重命名之后的字段上就沒有索引了,因此最好在重命名之前使用索引。

數(shù)學(xué)表達(dá)式

數(shù)學(xué)表達(dá)式可以用來對一組數(shù)值進(jìn)行加減乘除取模,比如我的數(shù)據(jù)結(jié)構(gòu)如下:

{
    "_id" : ObjectId("59f841f5b998d8acc7d08863"),
    "orderAddressL" : "ShenZhen",
    "prodMoney" : 45.0,
    "freight" : 13.0,
    "discounts" : 3.0,
    "orderDate" : ISODate("2017-10-31T09:27:17.342Z"),
    "prods" : [ 
        "可樂", 
        "奶茶"
    ]
}

訂單的總費(fèi)用為商品費(fèi)用加上運(yùn)費(fèi),查詢?nèi)缦拢?/p>

db.sang_collect.aggregate({$project:{totalMoney:{$add:["$prodMoney","$freight"]}}})

實(shí)際付款的費(fèi)用是總費(fèi)用減去折扣,如下:

db.sang_collect.aggregate({$project:{totalPay:{$subtract:[{$add:["$prodMoney","$freight"]},"$discounts"]}}})

再來三個(gè)無厘頭運(yùn)算,比如計(jì)算prodMoney和freight和discounts的乘積:

db.sang_collect.aggregate({$project:{test1:{$multiply:["$prodMoney","$freight","$discounts"]}}})

再比如求freight的商,如下:

db.sang_collect.aggregate({$project:{test1:{$divide:["$prodMoney","$freight"]}}})

再比如用prodMoney取模,如下:

db.sang_collect.aggregate({$project:{test1:{$mod:["$prodMoney","$freight"]}}})

加法和乘法都可以接收多個(gè)參數(shù),其余的都接收兩個(gè)參數(shù)。

日期表達(dá)式

日期表達(dá)式可以從一個(gè)日期類型中提取出年、月、日、星期、時(shí)、分、秒等信息,如下:

db.sang_collect.aggregate({$project:{"年份":{$year:"$orderDate"},"月份":{$month:"$orderDate"},"一年中第幾周":{$week:"$orderDate"},"日期":{$dayOfMonth:"$orderDate"},"星期":{$dayOfWeek:"$orderDate"},"一年中第幾天":{$dayOfYear:"$orderDate"},"時(shí)":{$hour:"$orderDate"},"分":{$minute:"$orderDate"},"秒":{$second:"$orderDate"},"毫秒":{$millisecond:"$orderDate"},"自定義格式化時(shí)間":{$dateToString:{format:"%Y年%m月%d %H:%M:%S",date:"$orderDate"}}}})

執(zhí)行結(jié)果如下:

{
    "_id" : ObjectId("59f841f5b998d8acc7d08861"),
    "年份" : 2017,
    "月份" : 10,
    "一年中第幾周" : 44,
    "日期" : 31,
    "星期" : 3,
    "一年中第幾天" : 304,
    "時(shí)" : 9,
    "分" : 27,
    "秒" : 17,
    "毫秒" : 342,
    "自定義格式化時(shí)間" : "2017年10月31 09:27:17"
}

week表示本周是本年的第幾周,從0開始計(jì)。$dateToString是MongoDB3.0+中的功能。格式化的字符還有以下幾種:

MongoDB中如何操作管道操  

字符串表達(dá)式

字符串表達(dá)式中有字符串的截取、拼接、轉(zhuǎn)大寫、轉(zhuǎn)小寫等操作,比如我截取orderAddressL前兩個(gè)字符返回,如下:

db.sang_collect.aggregate({$project:{addr:{$substr:["$orderAddressL",0,2]}}})

再比如我將orderAddressL和orderDate拼接后返回:

db.sang_collect.aggregate({$project:{addr:{$concat:["$orderAddressL",{$dateToString:{format:"--%Y年%m月%d",date:"$orderDate"}}]}}})

結(jié)果如下:

{
    "_id" : ObjectId("59f841f5b998d8acc7d08861"),
    "addr" : "NanJing--2017年10月31"
}

再比如我將orderAddressL全部轉(zhuǎn)為小寫返回:

db.sang_collect.aggregate({$project:{addr:{$toLower:"$orderAddressL"}}})

再比如我將orderAddressL全部轉(zhuǎn)為大寫返回:

db.sang_collect.aggregate({$project:{addr:{$toUpper:"$orderAddressL"}}})

邏輯表達(dá)式

想要比較兩個(gè)數(shù)字的大小,可以使用$cmp操作符,如下:

db.sang_collect.aggregate({$project:{test:{$cmp:["$freight","$discounts"]}}})

如果第一個(gè)參數(shù)大于第二個(gè)參數(shù)返回正數(shù),第一個(gè)參數(shù)小于第二個(gè)則返回負(fù)數(shù),也可以利用$strcasecmp來比較字符串(中文無效):

db.sang_collect.aggregate({$project:{test:{$strcasecmp:[{$dateToString:{format:"..%Y年%m月%d",date:"$orderDate"}},"$orderAddressL"]}}})

至于我們之前介紹的ne/gte/lte等操作符在這里一樣是適用的。另外還有or、and為例,如下:

db.sang_collect.aggregate({$project:{test:{$and:[{"$eq":["$freight","$prodMoney"]},{"$eq":["$freight","$discounts"]}]}}})

or則表示參數(shù)中有一個(gè)為true就返回true,$not則會(huì)對它的參數(shù)的值取反,如下:

db.sang_collect.aggregate({$project:{test:{$not:{"$eq":["$freight","$prodMoney"]}}}})

另外還有兩個(gè)流程控制語句,如下:

db.sang_collect.aggregate({$project:{test:{$cond:[false,"trueExpr","falseExpr"]}}})

$cond第一個(gè)參數(shù)如果為true,則返回trueExpr,否則返回falseExpr.

db.sang_collect.aggregate({$project:{test:{$ifNull:[null,"replacementExpr"]}}})

$ifNull第一個(gè)參數(shù)如果為null,則返回replacementExpr,否則就返回第一個(gè)參數(shù)。

關(guān)于MongoDB中如何操作管道操問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。


當(dāng)前標(biāo)題:MongoDB中如何操作管道操
文章URL:http://weahome.cn/article/peessh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部