在 MongoDB 中实现聚合 - 解构、分组和投影?
MongoDB 中的 $unwind 用于将来自输入文档的数组字段解构,并针对每个元素输出一个文档。
$group 用于按指定的 _id 表达式对输入文档分组,并针对每个不同的分组输出一个文档。
$project 用于将带有请求字段的文档传递到管道中的下一阶段。
让我们创建一个包含文档的集合 -
> db.demo238.insertOne(
... {
...
... "EmailId" : "John@gmail.com",
... "details" : [
... {
... "Name" : "Bob",
... "isActive" : true
... }
... ]
... }
...);
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4418e3f4cebbeaebec5152")
}
>
> db.demo238.insertOne(
... {
...
... "EmailId" : "Chris@gmail.com",
... "details" : [
... {
... "Name" : "David"
... }
... ]
... }
...);
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4418e3f4cebbeaebec5153")
}
>
>
> db.demo238.insertOne(
... {
...
... "EmailId" : "Mike@gmail.com",
... "details" : [
... {
... "Name" : "Carol",
... "isActive" : true
... }
... ]
... }
...);
{
"acknowledged" : true,
"insertedId" : ObjectId("5e4418e4f4cebbeaebec5154")
}在 find() 方法的帮助下,从集合中显示所有文档
> db.demo238.find().pretty();
这将产生以下输出 -
{
"_id" : ObjectId("5e4418e3f4cebbeaebec5152"),
"EmailId" : "John@gmail.com",
"details" : [
{
"Name" : "Bob",
"isActive" : true
}
]
}
{
"_id" : ObjectId("5e4418e3f4cebbeaebec5153"),
"EmailId" : "Chris@gmail.com",
"details" : [
{
"Name" : "David"
}
]
}
{
"_id" : ObjectId("5e4418e4f4cebbeaebec5154"),
"EmailId" : "Mike@gmail.com",
"details" : [
{
"Name" : "Carol",
"isActive" : true
}
]
}以下是实现 MongoDB 聚合的查询 - 解构、分组和投影 -
> db.demo238.aggregate(
... [
... { "$match": { "details.isActive": true } },
... { "$unwind": "$details" },
... { "$match": { "details.isActive": true } },
... { "$group": {
... "_id": "$details.Name",
... "active": { "$first": "$_id" }
... }}
... ],
... function(err,result) {
...
... }
...);这将产生以下输出 -
{ "_id" : "Carol", "active" : ObjectId("5e4418e4f4cebbeaebec5154") }
{ "_id" : "Bob", "active" : ObjectId("5e4418e3f4cebbeaebec5152") }
广告
Data Structure
Networking
RDBMS
Operating System
Java
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP