集合test中有下面的记录:
{
"_id": "79550af26029c54004de448f1d38f5fb",
"friends": [
{
"ah": [
"足球",
"羽毛球"
]
},
{
"ah": [
"乒乓球"
]
}
],
"xm": "张三"
}
想获取friends数组中第一个元素中ah数组元素的个数,下面的写法却不是想要的结果,该如何写呢,谢谢哈~
db.collection('test').aggregate()
.project({
size: $.size('$friends.0.ah')
})
.end()
x希望得到的数据是
[
{
"_id": "79550af26029c54004de448f1d38f5fb",
"size": 2
}
]
但实际size却是0
刚才看到一位朋友回答问题,并再次进行的问询,结果莫名其妙,刷新后啥都没了,非常非常抱歉啊
那位朋友说是这样操作:
db.collection('test').aggregate() .project({ na: $.arrayElemAt(['$friends',0]) }) .project({ size: $.size('$na.ah') }) .end()
非常棒,只是我想知道原来的写法为何不行,其实我原本是想用在match中,满足条件的记录直接进行更新。
db.collection('test').aggregate() .match( _.expr( $.lt([$.size($.ifNull(['$friends.0.ah',[]])),2]) ) ) .end()
小于2条记录的会查询到,这里应该等于2,不会被查询到才对,但因size大小是0所以会被查询到,这是不应该的。
https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/database/query-array-object.html
没想到并不通用~