$+标识符

语法

  1. { <字段名.$+标识符>: <value> }

描述

$+标识符 是一种特殊的命令符,这种命令符只作用于数组对象,标识符是一个整数,如 $1,$3,标识符相当于一个临时的存储,会把匹配成功的数组元素的索引存储起来。下面这些是错误的书写格式:$5.4,$a2,$3c,$MA。

这种命令符只作用于数组,用来代替数组的索引 Key,并且可以把匹配到的第一个索引值传递到方法 update 的 rule 参数中。

示例

在集合 foo.bar 插入3条记录:

  1. > db.foo.bar.insert( { "a": [ 1, 2, 3, 4, 5 ] } )
  2. > db.foo.bar.insert( { "a": [ 1, 4, 5 ] } )
  3. > db.foo.bar.insert( { "a": [ 4, 2, 1 ] } )

SequoiaDB shell 运行如下:

  • 查询出字段“a”的数组中存在元素5的记录:

    1. > db.foo.bar.find( { "a.$1": 5 }, { "a": 1 } )
    2. {
    3. "a": [
    4. 1,
    5. 2,
    6. 3,
    7. 4,
    8. 5
    9. ]
    10. }
    11. {
    12. "a": [
    13. 1,
    14. 4,
    15. 5
    16. ]
    17. }
    18. Return 2 row(s).
  • 修改数组“a”中的元素,把值为4的元素改成100:

    1. > db.foo.bar.update( { "$set": { "a.$1": 100 } }, { "a.$1": 4 } )
    2. > db.foo.bar.find()
    3. {
    4. "_id": {
    5. "$oid": "582450162b4c38286d000014"
    6. },
    7. "a": [
    8. 1,
    9. 2,
    10. 3,
    11. 100,
    12. 5
    13. ]
    14. }
    15. {
    16. "_id": {
    17. "$oid": "5824501b2b4c38286d000015"
    18. },
    19. "a": [
    20. 1,
    21. 100,
    22. 5
    23. ]
    24. }
    25. {
    26. "_id": {
    27. "$oid": "582450202b4c38286d000016"
    28. },
    29. "a": [
    30. 100,
    31. 2,
    32. 1
    33. ]
    34. }
    35. Return 3 row(s).
  • 修改数组“a”中的元素,把值为100的元素改成2,且把1修改为200:

    1. > db.foo.bar.update( { "$set": { "a.$1": 2, "a.$2": 200 } }, { "a.$1": 100, "a.$2": 1 } )
    2. > db.foo.bar.find()
    3. {
    4. "_id": {
    5. "$oid": "582450162b4c38286d000014"
    6. },
    7. "a": [
    8. 200,
    9. 2,
    10. 3,
    11. 2,
    12. 5
    13. ]
    14. }
    15. {
    16. "_id": {
    17. "$oid": "5824501b2b4c38286d000015"
    18. },
    19. "a": [
    20. 200,
    21. 2,
    22. 5
    23. ]
    24. }
    25. {
    26. "_id": {
    27. "$oid": "582450202b4c38286d000016"
    28. },
    29. "a": [
    30. 2,
    31. 2,
    32. 200
    33. ]
    34. }
    35. Return 3 row(s).
  • 现在要修改数组“a”中的元素,把值为2的元素改成2000:

    Note:
    如果有多个元素符合规则,那么只会修改第一个。

    1. > db.foo.bar.update( { "$set" : { "a.$1" : 2000 } }, { "a.$1": 2 } )
    2. > db.foo.bar.find()
    3. {
    4. "_id": {
    5. "$oid": "582450162b4c38286d000014"
    6. },
    7. "a": [
    8. 200,
    9. 2000,
    10. 3,
    11. 2,
    12. 5
    13. ]
    14. }
    15. {
    16. "_id": {
    17. "$oid": "5824501b2b4c38286d000015"
    18. },
    19. "a": [
    20. 200,
    21. 2000,
    22. 5
    23. ]
    24. }
    25. {
    26. "_id": {
    27. "$oid": "582450202b4c38286d000016"
    28. },
    29. "a": [
    30. 2000,
    31. 2,
    32. 200
    33. ]
    34. }
    35. Return 3 row(s).