$+标识符
语法
{ <字段名.$+标识符>: <value> }
描述
$+标识符 是一种特殊的命令符,这种命令符只作用于数组对象,标识符是一个整数,如 $1,$3,标识符相当于一个临时的存储,会把匹配成功的数组元素的索引存储起来。下面这些是错误的书写格式:$5.4,$a2,$3c,$MA。
这种命令符只作用于数组,用来代替数组的索引 Key,并且可以把匹配到的第一个索引值传递到方法 update 的 rule 参数中。
示例
在集合 sample.employee 插入3条记录:
> db.sample.employee.insert( { "a": [ 1, 2, 3, 4, 5 ] } )
> db.sample.employee.insert( { "a": [ 1, 4, 5 ] } )
> db.sample.employee.insert( { "a": [ 4, 2, 1 ] } )
SequoiaDB shell 运行如下:
查询出字段“a”的数组中存在元素5的记录:
> db.sample.employee.find( { "a.$1": 5 }, { "a": 1 } )
{
"a": [
1,
2,
3,
4,
5
]
}
{
"a": [
1,
4,
5
]
}
Return 2 row(s).
修改数组“a”中的元素,把值为4的元素改成100:
> db.sample.employee.update( { "$set": { "a.$1": 100 } }, { "a.$1": 4 } )
> db.sample.employee.find()
{
"_id": {
"$oid": "582450162b4c38286d000014"
},
"a": [
1,
2,
3,
100,
5
]
}
{
"_id": {
"$oid": "5824501b2b4c38286d000015"
},
"a": [
1,
100,
5
]
}
{
"_id": {
"$oid": "582450202b4c38286d000016"
},
"a": [
100,
2,
1
]
}
Return 3 row(s).
修改数组“a”中的元素,把值为100的元素改成2,且把1修改为200:
> db.sample.employee.update( { "$set": { "a.$1": 2, "a.$2": 200 } }, { "a.$1": 100, "a.$2": 1 } )
> db.sample.employee.find()
{
"_id": {
"$oid": "582450162b4c38286d000014"
},
"a": [
200,
2,
3,
2,
5
]
}
{
"_id": {
"$oid": "5824501b2b4c38286d000015"
},
"a": [
200,
2,
5
]
}
{
"_id": {
"$oid": "582450202b4c38286d000016"
},
"a": [
2,
2,
200
]
}
Return 3 row(s).
现在要修改数组“a”中的元素,把值为2的元素改成2000:
Note:
如果有多个元素符合规则,那么只会修改第一个。> db.sample.employee.update( { "$set" : { "a.$1" : 2000 } }, { "a.$1": 2 } )
> db.sample.employee.find()
{
"_id": {
"$oid": "582450162b4c38286d000014"
},
"a": [
200,
2000,
3,
2,
5
]
}
{
"_id": {
"$oid": "5824501b2b4c38286d000015"
},
"a": [
200,
2000,
5
]
}
{
"_id": {
"$oid": "582450202b4c38286d000016"
},
"a": [
2000,
2,
200
]
}
Return 3 row(s).