请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

这里的数组用$gt比较操作符是怎么运算的?

之前的比较操作符都是比较的字符串或者数字,比如

db.accounts.find({ name: { $gt: "karen" } })

这里突然用数组和字符串进行比较,

db.accounts.find({ contact: { $gt: "Alabama" } })

请问,数组contact是怎么和字符串Alabama比较的?

正在回答

1回答

同学你好~这里我们不是单独使用这个筛选条件的,而是在投影中和$操作符搭配使用的,完整的语句是:

db.accounts.find( { contact: { $gt: "Alabama" }, { "contact.$": 1} )

这里的$是一个特殊的数组占位操作符,它的意思是筛选出数组中符合筛选条件的第一个元素。这是一个相对来说比较特殊的操作符,不可以把它和之前的筛选条件语句拆开使用。

其实使用$操作符的机会可能不多,平时更常用的还是通过$elemMatch操作符来筛选数组元素

0 回复 有任何疑惑可以回复我~
  • 提问者 champ #1
    我还是没有理解,不是先按照query筛选,然后把结果投影吗?
    回复 有任何疑惑可以回复我~ 2019-05-20 00:08:10
  • 提问者 champ #2
    你的意思是,projection中的$会影响到前面的筛选逻辑吗?因为从字面意思来看,前面的query是在比较数组和字符串的大小,而不是数组中的元素和字符串的大小
    回复 有任何疑惑可以回复我~ 2019-05-20 00:12:39
  • Stannum 回复 提问者 champ #3
    你可以这样理解,把$操作符当作$elemMatch操作符的一种简写形式。当你对于数组元素的筛选条件是单一条件时,可以省去$elemMatch操作符,而在投影文档中使用$操作符作为替代。
    不过,我个人也同意这个$操作符简写形式的可读性不强,所以在课程中只是介绍给大家了解,在日常应用中,还是推荐直接使用$elemMath操作符
    回复 有任何疑惑可以回复我~ 2019-05-20 00:24:55
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信