Home > Article > Backend Development > MongoDB pipeline operators
Friends who are familiar with the Linux operating system should know that there are pipes in Linux, which can be used to process data conveniently. MongoDB version 2.2 also introduces a new data aggregation framework. A document can pass through a pipeline composed of multiple nodes. Each node has its own special functions, such as document grouping, document filtering, etc. Each node will accept a series of documents. , do some type conversion on these documents, and then pass the converted documents to the next node, and the last node will return the results to the client. In this article, we will first look at some basic pipeline operators.
$match
$match can be used to filter documents. After the filtering is completed, we can filter the obtained Let’s do data aggregation on the document subset. The query operators we introduced before can be used in $match. For example, get all the documents whose author is "Du Fu" in the collection, as follows:
db.sang_collect.aggregate({$match:{author:"杜甫"}})
We are here In actual use, it is best to put $match in front of the pipeline, which can reduce the workload of the subsequent pipeline. At the same time, we can also use the index when executing $match before projection and grouping.
$project can be used to extract the desired field, as follows:
db.sang_collect.aggregate({$project:{title:1,_id:0}})
1 means that the field is required, 0 means If you do not need this field, you can also rename the returned field, for example, change title to articleTitle, as follows:
db.sang_collect.aggregate({$project:{"articleTitle":"$title"}})
However, there is a problem that needs attention here. If there is an index on the original field, the field after renaming There will be no index on it, so it is best to use the index before renaming.
Mathematical expression can be used to add, subtract, multiply, and divide a set of values to modulo. For example, my data structure is as follows:
{ "_id" : ObjectId("59f841f5b998d8acc7d08863"), "orderAddressL" : "ShenZhen", "prodMoney" : 45.0, "freight" : 13.0, "discounts" : 3.0, "orderDate" : ISODate("2017-10-31T09:27:17.342Z"), "prods" : [ "可乐", "奶茶" ] }
The total cost of the order Add freight to the cost of the product, and the query is as follows:
db.sang_collect.aggregate({$project:{totalMoney:{$add:["$prodMoney","$freight"]}}})
The actual payment cost is the total cost minus the discount, as follows:
db.sang_collect.aggregate({$project:{totalPay:{$subtract:[{$add:["$prodMoney","$freight"]},"$discounts"]}}})
Let’s do three more nonsensical operations, such as calculating prodMoney, freight and discounts The product of:
db.sang_collect.aggregate({$project:{test1:{$multiply:["$prodMoney","$freight","$discounts"]}}})
Another example is to find the quotient of $prodMoney and $freight, as follows:
db.sang_collect.aggregate({$project:{test1:{$pide:["$prodMoney","$freight"]}}})
Another example is to use $freight to modulo $prodMoney, as follows:
db.sang_collect.aggregate({$project:{test1:{$mod:["$prodMoney","$freight"]}}})
Both addition and multiplication can accept multiple arguments, the rest accept two arguments.
Date expression can extract the year, month, day, week, hour, minute, second and other information from a date type, as follows:
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"}}}})
The execution results are as follows:
{ "_id" : ObjectId("59f841f5b998d8acc7d08861"), "年份" : 2017, "月份" : 10, "一年中第几周" : 44, "日期" : 31, "星期" : 3, "一年中第几天" : 304, "时" : 9, "分" : 27, "秒" : 17, "毫秒" : 342, "自定义格式化时间" : "2017年10月31 09:27:17" }
$dayOfWeek returns the week, 1 represents Sunday, 7 represents Saturday, $week represents the week of the year, starting from 0. $dateToString is a feature in MongoDB3.0+. There are also the following formatting characters:
Character | Meaning | Value range |
---|---|---|
%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 |
Minute (2 digits, zero padded) | 00-59 | |
Second (2 digits, zero padded) | 00-60 | |
Millisecond (3 digits , zero padded) | 000-999 | |
Day of year (3 digits, zero padded) | 001- 366 | ##%w |
1-7 | %U | |
00-53 |
The above is the detailed content of MongoDB pipeline operators. For more information, please follow other related articles on the PHP Chinese website!