MongoDB cursor.forEach() 方法

forEach() 方法是 MongoDB 中用于对查询结果进行迭代操作的方法之一。它可以让开发人员对查询结果进行自定义的迭代操作,例如计算、筛选、格式化等等。

语法

forEach() 方法的语法如下:

db.collection.find().forEach(function)

其中,cursor 是 MongoDB 的游标对象,function 是一个回调函数,用于对查询结果进行自定义操作。

使用场景

forEach() 方法适用于需要对查询结果进行自定义迭代操作的场景,例如计算查询结果的总数、对查询结果进行格式化等等。在实际应用中,forEach() 方法常常和其他 MongoDB 查询方法一起使用,例如 find()aggregate() 等等。

示例

示例 1

以下是使用 forEach() 方法对查询结果进行自定义操作的示例:

假设我们有一个名为 users 的集合,其中包含了一些用户信息,例如用户名、年龄、性别等等。我们可以使用以下代码查询年龄大于等于 18 岁的用户,并计算他们的平均年龄:

var totalAge = 0
var count = 0

db.users.find({ age: { $gte: 18 } }).forEach(function (user) {
  totalAge += user.age
  count++
})

var avgAge = totalAge / count

print("The average age of users over 18 is " + avgAge)

在这个示例中,我们首先定义了两个变量 totalAgecount,用于保存年龄总和和用户数量。然后,我们使用 find() 方法查询年龄大于等于 18 岁的用户,并对查询结果使用 forEach() 方法进行迭代操作。在迭代操作中,我们对每个用户的年龄进行累加,并将用户数量加 1。最后,我们根据累加的年龄总和和用户数量计算出平均年龄,并使用 print() 方法输出结果。

示例 2

以下是使用 forEach() 方法对查询结果进行格式化操作的示例:

假设我们有一个名为 articles 的集合,其中包含了一些文章信息,例如标题、作者、发布日期等等。我们可以使用以下代码查询最近发布的 5 篇文章,并将其格式化为 HTML:

var html = ""

db.articles
  .find()
  .sort({ date: -1 })
  .limit(5)
  .forEach(function (article) {
    html += "<h1>" + article.title + "</h1>"
    html +=
      "<p>Published by " +
      article.author +
      " on " +
      article.date.toDateString() +
      "</p>"
    html += "<p>" + article.content + "</p>"
    html += "<hr>"
  })

print(html)

在这个示例中,我们首先定义了一个变量 html,用于保存格式化后的 HTML 代码。然后,我们使用 find() 方法查询所有文章,并按照发布日期倒序排列。接着,我们使用 limit() 方法限制查询结果的数量为 5。最后,我们使用 forEach() 方法遍历查询结果,并将每篇文章的标题、作者和发布日期以 HTML 格式添加到 html 变量中。

结论

forEach() 方法可以遍历查询结果中的每个文档,对每个文档执行特定的操作,例如对查询结果进行格式化、修改等操作。同时,我们需要注意在使用 forEach() 方法时,应尽量避免对大量文档进行操作,以免影响性能。