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
Basic usage
$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
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
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!
Hot AI Tools
Undresser.AI Undress
AI-powered app for creating realistic nude photos
AI Clothes Remover
Online AI tool for removing clothes from photos.
Undress AI Tool
Undress images for free
Clothoff.io
AI clothes remover
AI Hentai Generator
Generate AI Hentai for free.
Hot Article
Hot Tools
Notepad++7.3.1
Easy-to-use and free code editor
SublimeText3 Chinese version
Chinese version, very easy to use
Zend Studio 13.0.1
Powerful PHP integrated development environment
Dreamweaver CS6
Visual web development tools
SublimeText3 Mac version
God-level code editing software (SublimeText3)
Hot Topics
1378
52
How to use pipes to read and write files in Golang?
Jun 04, 2024 am 10:22 AM
File reading and writing through pipes: Create a pipe to read data from the file and pass it through the pipe Receive the data from the pipe and process it Write the processed data to the file Use goroutines to perform these operations concurrently to improve performance
Astar staking principle, income dismantling, airdrop projects and strategies & operation nanny-level strategy
Jun 25, 2024 pm 07:09 PM
Table of Contents Astar Dapp Staking Principle Staking Revenue Dismantling of Potential Airdrop Projects: AlgemNeurolancheHealthreeAstar Degens DAOVeryLongSwap Staking Strategy & Operation "AstarDapp Staking" has been upgraded to the V3 version at the beginning of this year, and many adjustments have been made to the staking revenue rules. At present, the first staking cycle has ended, and the "voting" sub-cycle of the second staking cycle has just begun. To obtain the "extra reward" benefits, you need to grasp this critical stage (expected to last until June 26, with less than 5 days remaining). I will break down the Astar staking income in detail,
How to configure MongoDB automatic expansion on Debian
Apr 02, 2025 am 07:36 AM
This article introduces how to configure MongoDB on Debian system to achieve automatic expansion. The main steps include setting up the MongoDB replica set and disk space monitoring. 1. MongoDB installation First, make sure that MongoDB is installed on the Debian system. Install using the following command: sudoaptupdatesudoaptinstall-ymongodb-org 2. Configuring MongoDB replica set MongoDB replica set ensures high availability and data redundancy, which is the basis for achieving automatic capacity expansion. Start MongoDB service: sudosystemctlstartmongodsudosys
How to implement timeout mechanism using pipeline in Go language?
Jun 03, 2024 pm 03:01 PM
Use a pipe to implement a timeout mechanism: Create a pipe. Create a goroutine to wait for elements in the pipeline. In another goroutine, close the pipe after a specified time. Use a select statement to select the appropriate action to perform when a pipeline element arrives or times out.
How to ensure high availability of MongoDB on Debian
Apr 02, 2025 am 07:21 AM
This article describes how to build a highly available MongoDB database on a Debian system. We will explore multiple ways to ensure data security and services continue to operate. Key strategy: ReplicaSet: ReplicaSet: Use replicasets to achieve data redundancy and automatic failover. When a master node fails, the replica set will automatically elect a new master node to ensure the continuous availability of the service. Data backup and recovery: Regularly use the mongodump command to backup the database and formulate effective recovery strategies to deal with the risk of data loss. Monitoring and Alarms: Deploy monitoring tools (such as Prometheus, Grafana) to monitor the running status of MongoDB in real time, and
How to improve application performance using pipes in Go?
Jun 05, 2024 pm 05:10 PM
Pipes in Go are a communication mechanism used to safely and efficiently transfer data between goroutines to improve application performance. There are two types of pipeline operations: Unbuffered: data must be sent and received synchronously. Buffered: The pipe has allocated storage space, allowing asynchronous send and receive. Example: When calculating the Fibonacci sequence, pipelines are used to communicate between the main goroutine and the calculation goroutine, thereby achieving concurrent calculations and significantly improving performance.
How to implement producer-consumer pattern using pipelines in Go language?
Jun 02, 2024 pm 03:28 PM
The producer-consumer model allows producers to put data into cache, while consumers can simultaneously extract data from it for processing. In Go, pipes are a communication mechanism that implements this pattern: Create a pipe: make(chanT), where T is the transfer data type. Producer function: put data into pipe (ch
How to close and cancel pipeline operations using pipeline in Go language?
Jun 01, 2024 pm 01:42 PM
In Go, closing a pipeline will send an implicit value nil, indicating that subsequent sending fails; while canceling a pipeline operation, use context.WithCancel() to create a context with a cancellation function, and call the cancel() function to cancel the operation, causing the pipeline operation to exit. .


