中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MongoDB中如何操作管道操

發布時間:2021-07-27 16:00:04 來源:億速云 閱讀:177 作者:Leah 欄目:大數據

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

$match

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

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

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

$project

基本用法

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

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

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

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

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

數學表達式

數學表達式可以用來對一組數值進行加減乘除取模,比如我的數據結構如下:

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

訂單的總費用為商品費用加上運費,查詢如下:

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

實際付款的費用是總費用減去折扣,如下:

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

再來三個無厘頭運算,比如計算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"]}}})

加法和乘法都可以接收多個參數,其余的都接收兩個參數。

日期表達式

日期表達式可以從一個日期類型中提取出年、月、日、星期、時、分、秒等信息,如下:

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

執行結果如下:

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

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

MongoDB中如何操作管道操  

字符串表達式

字符串表達式中有字符串的截取、拼接、轉大寫、轉小寫等操作,比如我截取orderAddressL前兩個字符返回,如下:

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"}}]}}})

結果如下:

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

再比如我將orderAddressL全部轉為小寫返回:

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

再比如我將orderAddressL全部轉為大寫返回:

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

邏輯表達式

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

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

如果第一個參數大于第二個參數返回正數,第一個參數小于第二個則返回負數,也可以利用$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則表示參數中有一個為true就返回true,$not則會對它的參數的值取反,如下:

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

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

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

$cond第一個參數如果為true,則返回trueExpr,否則返回falseExpr.

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

$ifNull第一個參數如果為null,則返回replacementExpr,否則就返回第一個參數。

關于MongoDB中如何操作管道操問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鄯善县| 漯河市| 上犹县| 筠连县| 嘉黎县| 神木县| 宁远县| 讷河市| 霍州市| 于田县| 芦溪县| 酉阳| 鹰潭市| 榆林市| 绍兴县| 城固县| 岳西县| 台前县| 延川县| 仲巴县| 深泽县| 鸡东县| 高平市| 保德县| 贵南县| 同德县| 武隆县| 武城县| 东台市| 巴里| 鄂伦春自治旗| 汾阳市| 定安县| 南丹县| 武夷山市| 六安市| 同心县| 永安市| 石柱| 泰顺县| 凤翔县|