1、$all
一般情况下数组中会有多个元素,使用all可以给出多个元素查询条件,对应的文档要全部包含查询条件中的数据才是匹配的文档。
db.test.find({"fruit":{"$all":["apple","banana"]}}) { "_id" : ObjectId("5b08184f3ba23b5c3e762812"), "fruit" : [ "apple", "banana", "watermelon" ] }
上面是使用了all关键词,要是你使用下面的语句是查询不到 数据的
db.test.find({"fruit":["apple","banana"]})
上面的语句全匹配查询,只有是[“apple”,”banana”]的文档才会被查询出来,这一点要对比理解清楚。
2、$size
根据上面的这个单词就可以发现是想要查出符合当前长度的文档
db.test.find({"fruit":{"$size":3}}) { "_id" : ObjectId("5b08184f3ba23b5c3e762812"), "fruit" : [ "apple", "banana", "watermelon" ] }
3、$slice
在之前的数组插入中我们已经使用过slice这个操作符了,当时是往数组里插入元素,但是只要保留指定长度的数据,使用到了slice,现在在查询这里我们可以使用这个切片返回指定数量的数据
db.test.find({"_id" : ObjectId("5b08184f3ba23b5c3e762812")},{"fruit":{"$slice":2}}) { "_id" : ObjectId("5b08184f3ba23b5c3e762812"), "fruit" : [ "apple", "banana" ] }
要注意了,不能直接查询数组并返回的,要知道先匹配文档然后取出数组的前两位数据。
4、数组范围查询$elemMatch
一眼看上去就是对每一个元素使用某种条件来筛选,需要注意的是这个操作符只对数组有用,非数组无法使用
db.test.find({"ff":{"$elemMatch":{"$gte":5}}}) { "_id" : ObjectId("5b081f273ba23b5c3e762813"), "ff" : [ 10.0, 20.0, 30.0 ] }