$elemMatchOne

语法

  1. { <字段名1>: { $elemMatchOne: <表达式1> }, <字段名2>: { $elemMatchOne: <表达式2> }, ... }

描述

返回数组内满足条件的第一个元素,或者嵌套对象中满足条件的第一个子对象。

其中“<表达式>”可以是值,也可以是带有匹配符的表达式,“$elemMatch”匹配符支持多层嵌套。

示例

在集合 foo.bar 插入2条记录,一条是数组类型,一条是嵌套对象类型

  1. > db.foo.bar.insert( { "_id": 1, "class": 1, "students": [ { "name": "ZhangSan", "age": 18 }, { "name": "LiSi", "age": 19 }, { "name": "WangErmazi", "age": 18 } ] } )
  2. > db.foo.bar.insert( { "_id": 2, "class": 2, "students": { "name": "LinWu", "age": 18 } } )
  3. > db.foo.bar.find()
  4. {
  5. "_id": 1,
  6. "class": 1,
  7. "students": [
  8. {
  9. "name": "ZhangSan",
  10. "age": 18
  11. },
  12. {
  13. "name": "LiSi",
  14. "age": 19
  15. },
  16. {
  17. "name": "WangErmazi",
  18. "age": 18
  19. }
  20. ]
  21. }
  22. {
  23. "_id": 2,
  24. "class": 2,
  25. "students": {
  26. "name": "LinWu",
  27. "age": 18
  28. }
  29. }
  30. Return 2 row(s).

SequoiaDB shell 运行如下:

  • 指定返回“age”等于 18 的第一个元素:

    1. > db.foo.bar.find( {}, { "students": { "$elemMatchOne": { "age": 18 } } } )
    2. {
    3. "_id": 1,
    4. "class": 1,
    5. "students": [
    6. {
    7. "name": "ZhangSan",
    8. "age": 18
    9. }
    10. ]
    11. }
    12. {
    13. "_id": 2,
    14. "class": 2,
    15. "students": {
    16. "age": 18
    17. }
    18. }
    19. Return 2 row(s).
  • 指定返回 class 1 中 “age”小于 19 的第一个学生,使用“$lt”表达式:

    1. > db.foo.bar.find( { class: 1 }, { "students": { "$elemMatchOne": { "age": { $lt: 19 } } } } )
    2. {
    3. "_id": 1,
    4. "class": 1,
    5. "students": [
    6. {
    7. "name": "ZhangSan",
    8. "age": 18
    9. }
    10. ]
    11. }
    12. Return 1 row(s).