Table of Contents
$project
Basic usage
Mathematical expression
Date expression
字符串表达式
逻辑表达式
Home Backend Development PHP Tutorial MongoDB pipeline operators

MongoDB pipeline operators

Dec 06, 2017 pm 02:09 PM
mongodb operate pipeline

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:"杜甫"}})
Copy after login

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}})
Copy after login

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"}})
Copy after login

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" : [ 
        "可乐", 
        "奶茶"
    ]
}
Copy after login

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

The actual payment cost is the total cost minus the discount, as follows:

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

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

Another example is to find the quotient of $prodMoney and $freight, as follows:

db.sang_collect.aggregate({$project:{test1:{$pide:["$prodMoney","$freight"]}}})
Copy after login

Another example is to use $freight to modulo $prodMoney, as follows:

db.sang_collect.aggregate({$project:{test1:{$mod:["$prodMoney","$freight"]}}})
Copy after login

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"}}}})
Copy after login

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"
}
Copy after login

$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:

##%MMinute (2 digits, zero padded)00-59%SSecond (2 digits, zero padded)00-60##%L%j##%wDay of week (1-Sunday, 7-Saturday)1-7%UWeek of year (2 digits, zero padded)00-53

字符串表达式

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

db.sang_collect.aggregate({$project:{addr:{$substr:["$orderAddressL",0,2]}}})
Copy after login

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

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

结果如下:

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

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

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

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

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

逻辑表达式

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

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

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

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

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

db.sang_collect.aggregate({$project:{test:{$and:[{"$eq":["$freight","$prodMoney"]},{"$eq":["$freight","$discounts"]}]}}})
Copy after login

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

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

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

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

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

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

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

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

MongoDB固定集合详解

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

phpstudy如何扩展MongoDB

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
Millisecond (3 digits , zero padded) 000-999
Day of year (3 digits, zero padded) 001- 366

The above is the detailed content of MongoDB pipeline operators. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Astar staking principle, income dismantling, airdrop projects and strategies & operation nanny-level strategy 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 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 ensure high availability of MongoDB on Debian 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

Use Composer to solve the dilemma of recommendation systems: andres-montanez/recommendations-bundle Use Composer to solve the dilemma of recommendation systems: andres-montanez/recommendations-bundle Apr 18, 2025 am 11:48 AM

When developing an e-commerce website, I encountered a difficult problem: how to provide users with personalized product recommendations. Initially, I tried some simple recommendation algorithms, but the results were not ideal, and user satisfaction was also affected. In order to improve the accuracy and efficiency of the recommendation system, I decided to adopt a more professional solution. Finally, I installed andres-montanez/recommendations-bundle through Composer, which not only solved my problem, but also greatly improved the performance of the recommendation system. You can learn composer through the following address:

Navicat's method to view MongoDB database password Navicat's method to view MongoDB database password Apr 08, 2025 pm 09:39 PM

It is impossible to view MongoDB password directly through Navicat because it is stored as hash values. How to retrieve lost passwords: 1. Reset passwords; 2. Check configuration files (may contain hash values); 3. Check codes (may hardcode passwords).

How to improve application performance using pipes in Go? 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.

What is the CentOS MongoDB backup strategy? What is the CentOS MongoDB backup strategy? Apr 14, 2025 pm 04:51 PM

Detailed explanation of MongoDB efficient backup strategy under CentOS system This article will introduce in detail the various strategies for implementing MongoDB backup on CentOS system to ensure data security and business continuity. We will cover manual backups, timed backups, automated script backups, and backup methods in Docker container environments, and provide best practices for backup file management. Manual backup: Use the mongodump command to perform manual full backup, for example: mongodump-hlocalhost:27017-u username-p password-d database name-o/backup directory This command will export the data and metadata of the specified database to the specified backup directory.

Major update of Pi Coin: Pi Bank is coming! Major update of Pi Coin: Pi Bank is coming! Mar 03, 2025 pm 06:18 PM

PiNetwork is about to launch PiBank, a revolutionary mobile banking platform! PiNetwork today released a major update on Elmahrosa (Face) PIMISRBank, referred to as PiBank, which perfectly integrates traditional banking services with PiNetwork cryptocurrency functions to realize the atomic exchange of fiat currencies and cryptocurrencies (supports the swap between fiat currencies such as the US dollar, euro, and Indonesian rupiah with cryptocurrencies such as PiCoin, USDT, and USDC). What is the charm of PiBank? Let's find out! PiBank's main functions: One-stop management of bank accounts and cryptocurrency assets. Support real-time transactions and adopt biospecies

See all articles