Mongoose 中与 MongoDB 中的 “$elemMatch” 相似的操作

阅读时长 3 分钟读完

在 MongoDB 中,可以使用 $elemMatch 操作符通过查询数组中的元素进行匹配,而在 Mongoose 中,可以通过 Query 类提供的类似功能来实现相同的操作。

$elemMatch 操作符用于匹配数组中满足特定条件的元素。在 MongoDB 中,可以将 $elemMatch 运算符用在查询或更新操作中。而在 Mongoose 中,并不是所有查询类型都支持 $elemMatch,仅适用于嵌套文档中的数组。

Mongoose 中使用 $elemMatch 操作符时,需要用到 Query 类的 $elemMatch 方法。

对于某个数组 arr,上述代码将查找包含键值对 {field1: value1} 的文档。

如果想要在一个查询中对多个条件运用 $elemMatch,使用以下语法:

$elemMatch 与普通查询的区别

假如现有一个文档 Schema 为:

-- -------------------- ---- -------
----- ---------- - --- -----------------
    ------ -------
    -------- -------
    --------- --
        ------- -------
        ----- -------
        ----- ----
    --
---

以下两种查询实现了相同的功能,但是:使用 $elemMatch 时,返回的结果将会是整个嵌套文档集合,每个嵌套文档都包含所有的键值对。而没有使用 $elemMatch 的查询,则只包含符合条件的键值对。

使用 $elemMatch:

不使用 $elemMatch:

相关例子

  • 查找至少有一个评论的帖子
  • 查找至少包含一条被颜值为 9 的评论的帖子
  • 查找至少包含一条评论的作者可以被称为“程序员”的帖子

注意事项

注意以下几点需要细心处理:

  • 如果要使用 $elemMatch 操作符,数组中必须嵌套其他文档。
  • $elemMatch 只适用于嵌套数组的文档。
  • 如果查询条件中嵌套多个 $elemMatch 操作符,则需要将它们封装在 $and 操作符中。

结论

$elemMatch 操作符是 MongoDB 和 Mongoose 中十分有用的功能,让我们可以对数组中的数据进行更加精准的匹配。学会了它的用法,我们就可以更加灵活地使用 MongoDB 和 Mongoose 进行数据操作。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67525fdd8bd460d3ad9380f6

纠错
反馈