Mongodb 3.6版本的福利好吧!
官网:https://docs.mongodb.com/manual/reference/operator/update/positional-all/#up.S[]
以前好像自己需要些循环遍历之后再进行$set更新
目前在做一个编程学习导向性社区,做出来现在自己的学校试试吧,也不知道咋样,前端很丑哈哈哈
http://plog.top 个人最近才有点时间边学边搭建吧
后端使用的Redis 5.2 和 mongodb 4.2 他们都说新版天坑,果然不假,这自己写代码的时间和查文档的时间居然能成 3:1的关系我也是醉了
好了步入正题 、 、 、[] 、$[identifier]、{arrayFilters,…}
$很早版本就能够使用了
但是呢他只会顺序的匹配到嵌套子文档中的第一个匹配项,也就是说使用它最多只能更新一个子文档。
$[] 3.6版本出来后 就能够对多个文档和多个子文档同时操作了,向强大的Sql老哥又迈进一步,
这是在挑衅啊~,然后这个功能还是过于鸡肋,
毕竟我们批量更新子文档又
(1)不是全部更新,只是部分字段
(2)更新子文档要条件的好吧,需要过滤的
哎~我说话不好听,上点图片压压惊
你肯定想问 wtf,这里的score是个什么鬼
其实他就是过滤之后的下标中的引用
比如你的嵌套子文档是 subDocument:[{x:1,y:1},{x:1,y:2},{x:1,y:3},{x:2,y:2}]
你需要更新子文档中 subDocument.x(dont panic!)这里是mongodb自己杜撰的写法,,这个其实应该是 subDocument.index.x == 1
所以我们得到的子文档的匹配数组索引列表就应该是 [0,1,2] 这是 subDocument中的数组下标
假如我们加了过滤条件 “y <= 2” 这样第3项下标2就被过滤掉了 成了 [0,1]
score in [0,1]
注意这里使用的下标是 [e] 而不是 [‘e.b’] 在arrayFilters中e代表每一项子文档,通过e.b对指定项进行过滤
帮助我们对子文档进行查找的工具
一 $elemMatch
二、 $size
三、$all
四、
o
r
!
[
在
这
里
插
入
图
片
描
述
]
(
h
t
t
p
s
:
/
/
i
m
g
−
b
l
o
g
.
c
s
d
n
i
m
g
.
c
n
/
20190930114938420.
p
n
g
?
x
−
o
s
s
−
p
r
o
c
e
s
s
=
i
m
a
g
e
/
w
a
t
e
r
m
a
r
k
,
t
y
p
e
Z
m
F
u
Z
3
p
o
Z
W
5
n
a
G
V
p
d
G
k
,
s
h
a
d
o
w
1
0
,
t
e
x
t
a
H
R
0
c
H
M
6
L
y
9
i
b
G
9
n
L
m
N
z
Z
G
4
u
b
m
V
0
L
3
F
x
X
z
Q
x
N
z
Y
z
N
j
U
0
,
s
i
z
e
1
6
,
c
o
l
o
r
F
F
F
F
F
F
,
t
7
0
)
五
、
or ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190930114938420.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNzYzNjU0,size_16,color_FFFFFF,t_70) 五、
or![在这里插入图片描述](https://img−blog.csdnimg.cn/20190930114938420.png?x−oss−process=image/watermark,typeZmFuZ3poZW5naGVpdGk,shadow10,textaHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNzYzNjU0,size16,colorFFFFFF,t70)五、in
谢谢观看,转载请标注来源Thanks