Skip to main content

👐 简单数组查询

在数组中查找数据

一个 JSON 数组可以包含标量值或对象。在我们的数据中,authors 有一个包含他们创作的书籍(他们的 ISBN)的数组。让我们获取一个作者:

db.authors.aggregate([{$limit: 1}])

👐 运行此聚合以获取一个作者

我得到了这个(可能会根据你导入的数据源而变化)

{
_id: ObjectId("64cc2db4830ba29148da4c3b"),
name: 'Richard Bruce Wright',
sanitizedName: 'richardbrucewright',
books: [
'0002005018'
],
aliases: [
'Wright, Richard Bruce'
]
}

我能获取书籍 0002005018 的所有作者吗?为此,我想要所有在 books 数组中包含 0002005018 的作者。事实证明这非常简单:

db.authors.aggregate([
{$match: {books: "0002005018"}}
])

👐 获取 ISBN 为 0395623650 的书籍的作者姓名:

答案
db.authors.aggregate([{$match: {books: "0395623650"}}])

> name: 'Juan Ramón Jiménez',

数组的大小

如果我们想知道一个作者有多少本书怎么办?为此我们可以使用 $size,添加我们需要知道大小的数组字段:

db.authors.aggregate([
{$project: {
name: 1,
bookCount: {$size: "$books"}
}
},
])

👐 谁写的书最多?(我们可以使用 { $sort: {"bookCount": -1}} 进行排序)

答案
let addNumberBooks = {
$project: {
name: 1,
bookCount: {$size: "$books"}
}
}

let orderByNumberOfBooksDesc = { $sort: {"bookCount": -1}}

let getOne = {$limit: 1}

db.authors.aggregate([
addNumberBooks,
orderByNumberOfBooksDesc,
getOne,
])