MongoDB-Pipeline-Betreiber

小云云
Freigeben: 2023-03-17 20:04:01
Original
2224 Leute haben es durchsucht

Freunde, die mit dem Linux-Betriebssystem vertraut sind, sollten wissen, dass es in Linux Pipes gibt, mit denen Daten bequem verarbeitet werden können. MongoDB Version 2.2 führt außerdem ein neues Datenaggregations-Framework ein. Ein Dokument kann eine Pipeline durchlaufen, die aus mehreren Knoten besteht. Jeder Knoten verfügt über seine eigenen Spezialfunktionen, z. B. Dokumentgruppierung, Dokumentfilterung usw. Jeder Knoten akzeptiert eine Reihe von Dokumenten. Führen Sie eine Typkonvertierung für diese Dokumente durch und übergeben Sie die konvertierten Dokumente dann an den nächsten Knoten. Der letzte Knoten gibt die Ergebnisse an den Client zurück. In diesem Artikel werfen wir zunächst einen Blick auf einige grundlegende Pipeline-Operatoren.

$match

$match kann zum Filtern von Dokumenten verwendet werden. Nachdem die Filterung abgeschlossen ist, können wir die erhaltenen Let's filtern Führen Sie eine Datenaggregation für die Dokumentteilmenge durch. Die zuvor eingeführten Abfrageoperatoren können in $match verwendet werden. Rufen Sie beispielsweise alle Dokumente in der Sammlung ab, deren Autor „Du Fu“ ist:

db.sang_collect.aggregate({$match:{author:"杜甫"}})
Nach dem Login kopieren

Bei der tatsächlichen Verwendung ist es am besten, $match vor der Pipeline zu platzieren, was die Arbeitslast der nachfolgenden Pipeline verringern kann. Gleichzeitig können wir den Index auch verwenden, wenn $match vor der Projektion und Gruppierung ausgeführt wird.

$project

Grundlegende Verwendung

$project kann wie folgt zum Extrahieren des gewünschten Felds verwendet werden:

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

1 bedeutet, dass das Feld ist erforderlich, 0 bedeutet, dass das Feld nicht benötigt wird, wie folgt:

db.sang_collect.aggregate({$project:{"articleTitle":"$title"}})
Nach dem Login kopieren

Es gibt jedoch ein Problem, das beachtet werden muss . Wenn für das ursprüngliche Feld ein Index vorhanden ist, benennen Sie es um. Es gibt keinen Index für das Feld, nachdem es benannt wurde. Daher ist es am besten, vor dem Umbenennen einen Index zu verwenden.

Mathematische Ausdrücke

Mathematische Ausdrücke können verwendet werden, um eine Reihe von Werten modulo zu addieren, zu subtrahieren, zu multiplizieren und zu dividieren. Meine Datenstruktur ist beispielsweise wie folgt:

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

Bestellung Die Gesamtkosten sind die Kosten für das Produkt plus Versand. Die Abfrage lautet wie folgt:

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

Die tatsächlichen Zahlungskosten sind die Gesamtkosten abzüglich des Rabatts, wie folgt:

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

Lassen Sie uns drei weitere unsinnige Berechnungen durchführen, wie z. B. Berechnen Sie das Produkt aus prodMoney, Fracht und Rabatten:

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

Ein weiteres Beispiel besteht darin, den Quotienten aus $prodMoney und $freight zu ermitteln, as folgt:

db.sang_collect.aggregate({$project:{test1:{$pide:["$prodMoney","$freight"]}}})
Nach dem Login kopieren

Ein weiteres Beispiel ist die Verwendung von $freight zum Modulieren von $prodMoney wie folgt:

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

Sowohl die Addition als auch die Multiplikation können mehrere Parameter erhalten, und der Rest erhält zwei Parameter .

Datumsausdruck

Datumsausdruck kann Jahr, Monat, Tag, Woche, Stunde, Minute, Sekunde und andere Informationen aus einem Datumstyp wie folgt extrahieren:

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"}}}})
Nach dem Login kopieren

Die Ausführungsergebnisse sind wie folgt:

{
    "_id" : ObjectId("59f841f5b998d8acc7d08861"),
    "年份" : 2017,
    "月份" : 10,
    "一年中第几周" : 44,
    "日期" : 31,
    "星期" : 3,
    "一年中第几天" : 304,
    "时" : 9,
    "分" : 27,
    "秒" : 17,
    "毫秒" : 342,
    "自定义格式化时间" : "2017年10月31 09:27:17"
}
Nach dem Login kopieren

$dayOfWeek gibt die Woche zurück, 1 bedeutet Sonntag, 7 bedeutet Samstag, $week bedeutet, dass diese Woche die Woche des Jahres ist, beginnend bei 0. $dateToString ist eine Funktion in MongoDB3.0+. Außerdem gibt es folgende Formatierungszeichen:

字符 含义 取值范围
%Y Year (4 digits, zero padded) 0000-9999
%m Month (2 digits, zero padded) 01-12
%d Day of Month (2 digits, zero padded) 01-31
%H Hour (2 digits, zero padded, 24-hour clock) 00-23
%M Minute (2 digits, zero padded) 00-59
%S Second (2 digits, zero padded) 00-60
%L Millisecond (3 digits, zero padded) 000-999
%j Day of year (3 digits, zero padded) 001-366
%w Day of week (1-Sunday, 7-Saturday) 1-7
%U Week of year (2 digits, zero padded) 00-53

字符串表达式

字符串表达式中有字符串的截取、拼接、转大写、转小写等操作,比如我截取orderAddressL前两个字符返回,如下:

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

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

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

结果如下:

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

再比如我将orderAddressL全部转为小写返回:

db.sang_collect.aggregate({$project:{addr:{$toLower:"$orderAddressL"}}})
Nach dem Login kopieren

再比如我将orderAddressL全部转为大写返回:

db.sang_collect.aggregate({$project:{addr:{$toUpper:"$orderAddressL"}}})
Nach dem Login kopieren

逻辑表达式

想要比较两个数字的大小,可以使用$cmp操作符,如下:

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

如果第一个参数大于第二个参数返回正数,第一个参数小于第二个则返回负数,也可以利用$strcasecmp来比较字符串(中文无效):

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

至于我们之前介绍的$eq/$ne/$gt/$gte/$lt/$lte等操作符在这里一样是适用的。另外还有$and、$or、$not等表达式可用,以$and为例,如下:

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

$and中的每个参数都为true时返回true,$or则表示参数中有一个为true就返回true,$not则会对它的参数的值取反,如下:

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

另外还有两个流程控制语句,如下:

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

$cond第一个参数如果为true,则返回trueExpr,否则返回falseExpr.

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

$ifNull第一个参数如果为null,则返回replacementExpr,否则就返回第一个参数。

以上内容就是MongoDB管道操作符部分介绍,希望能帮助到大家。

MongoDB固定集合详解

node.js操作MongoDB的代码案例分享

phpstudy如何扩展MongoDB

Das obige ist der detaillierte Inhalt vonMongoDB-Pipeline-Betreiber. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage