Les amis qui connaissent le système d'exploitation Linux doivent savoir qu'il existe des canaux sous Linux, qui peuvent être utilisés pour traiter facilement les données. MongoDB version 2.2 introduit également un nouveau cadre d'agrégation de données. Un document peut passer par un pipeline composé de plusieurs nœuds. Chaque nœud a ses propres fonctions spéciales, telles que le regroupement de documents, le filtrage de documents, etc. , effectuez une conversion de type sur ces documents, puis transmettez les documents convertis au nœud suivant, et le dernier nœud renverra les résultats au client. Dans cet article, nous examinerons d’abord quelques opérateurs de pipelines de base.
$match
$match peut être utilisé pour filtrer les documents Une fois le filtrage terminé, nous pouvons filtrer les Let's obtenus. faire l'agrégation des données sur le sous-ensemble de documents. Les opérateurs de requête que nous avons introduits précédemment peuvent être utilisés dans $match. Par exemple, obtenez tous les documents dont l'auteur est "Du Fu" dans la collection, comme suit :
db.sang_collect.aggregate({$match:{author:"杜甫"}})
db.sang_collect.aggregate({$project:{title:1,_id:0}})
db.sang_collect.aggregate({$project:{"articleTitle":"$title"}})
<.>
Commande Le coût total est le coût du produit plus les frais d'expédition. La requête est la suivante :{ "_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"]}}})
db.sang_collect.aggregate({$project:{test1:{$multiply:["$prodMoney","$freight","$discounts"]}}})
db.sang_collect.aggregate({$project:{test1:{$pide:["$prodMoney","$freight"]}}})
db.sang_collect.aggregate({$project:{test1:{$mod:["$prodMoney","$freight"]}}})
Expression de date
Les résultats d'exécution sont les suivants :
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" }
字符串表达式中有字符串的截取、拼接、转大写、转小写等操作,比如我截取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"]}}})
至于我们之前介绍的$eq/$ne/$gt/$gte/$lt/$lte等操作符在这里一样是适用的。另外还有$and、$or、$not等表达式可用,以$and为例,如下:
db.sang_collect.aggregate({$project:{test:{$and:[{"$eq":["$freight","$prodMoney"]},{"$eq":["$freight","$discounts"]}]}}})
$and中的每个参数都为true时返回true,$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管道操作符部分介绍,希望能帮助到大家。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!