mongodb查询之数组查询

1,383次阅读
没有评论

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
    ]
}

admin
版权声明:本站原创文章,由admin2018-05-25发表,共计948字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)