• $elemMatchOne
    • 语法
    • 描述
    • 示例

    $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).