📅  最后修改于: 2023-12-03 15:29:06.071000             🧑  作者: Mango
在MongoDB中,$unwind操作符可以被用于将数组类型的字段展开并将每个元素作为单独的文档进行处理。这个操作符通常用于解决需要在查询数组类型字段中的值进行聚合计算的场景。
$unwind操作符的语法如下:
{$unwind: <field>}
其中,<field>
指的是需要展开的数组类型字段。例如,如果我们有一个包含了数组类型字段的集合,每个文档类似下面这样:
{
"_id": ObjectId("5f02e72d652757fb98853eeb"),
"name": "Alice",
"hobbies": ["reading", "swimming", "coding"]
}
我们可以使用$unwind操作符将hobbies
字段展开,得到以下文档序列:
{
"_id": ObjectId("5f02e72d652757fb98853eeb"),
"name": "Alice",
"hobbies": "reading"
},
{
"_id": ObjectId("5f02e72d652757fb98853eeb"),
"name": "Alice",
"hobbies": "swimming"
},
{
"_id": ObjectId("5f02e72d652757fb98853eeb"),
"name": "Alice",
"hobbies": "coding"
}
假设我们有一个包含了人员信息和他们的书籍清单的文档集合,类似这样:
{
"_id": ObjectId("5f02e72d652757fb98853eeb"),
"name": "Alice",
"books": [
{ "title": "The Great Gatsby", "author": "F. Scott Fitzgerald" },
{ "title": "To Kill a Mockingbird", "author": "Harper Lee" },
{ "title": "1984", "author": "George Orwell" }
]
},
{
"_id": ObjectId("5f02e72d652757fb98853eec"),
"name": "Bob",
"books": [
{ "title": "The Catcher in the Rye", "author": "J.D. Salinger" },
{ "title": "The Hobbit", "author": "J.R.R. Tolkien" }
]
}
我们现在想要统计每个作者的书籍总数,可以使用以下代码:
db.books.aggregate([
{$unwind: "$books"},
{$group: {_id: "$books.author", count: {$sum: 1}}}
])
这段代码使用$unwind将books
字段展开,然后使用$group操作符计算每个作者的书籍总数。
$unwind操作符是MongoDB中一个很有用的操作符,可以帮助我们对数组类型字段进行聚合计算。需要注意的是,$unwind操作符只能用于查询,不能用于分片集合。