采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
之前的比较操作符都是比较的字符串或者数字,比如
db.accounts.find({ name: { $gt: "karen" } })
这里突然用数组和字符串进行比较,
db.accounts.find({ contact: { $gt: "Alabama" } })
请问,数组contact是怎么和字符串Alabama比较的?
contact
Alabama
同学你好~这里我们不是单独使用这个筛选条件的,而是在投影中和$操作符搭配使用的,完整的语句是:
db.accounts.find( { contact: { $gt: "Alabama" }, { "contact.$": 1} )
这里的$是一个特殊的数组占位操作符,它的意思是筛选出数组中符合筛选条件的第一个元素。这是一个相对来说比较特殊的操作符,不可以把它和之前的筛选条件语句拆开使用。
其实使用$操作符的机会可能不多,平时更常用的还是通过$elemMatch操作符来筛选数组元素
我还是没有理解,不是先按照query筛选,然后把结果投影吗?
你的意思是,projection中的$会影响到前面的筛选逻辑吗?因为从字面意思来看,前面的query是在比较数组和字符串的大小,而不是数组中的元素和字符串的大小
你可以这样理解,把$操作符当作$elemMatch操作符的一种简写形式。当你对于数组元素的筛选条件是单一条件时,可以省去$elemMatch操作符,而在投影文档中使用$操作符作为替代。 不过,我个人也同意这个$操作符简写形式的可读性不强,所以在课程中只是介绍给大家了解,在日常应用中,还是推荐直接使用$elemMath操作符
登录后可查看更多问答,登录/注册
30%理论+70%实战,用实操检验真理,一门让你事半功倍的入门进阶课
1.6k 9
2.9k 4
1.3k 6
1.0k 9