java mongo 查询数组_MongoDB查询(数组、内嵌文档)
一、簡介
我們上一篇介紹了db.collection.find()可以實現根據條件查詢和指定使用投影運算符返回的字段省略此參數返回匹配文檔中的所有字段,我們今天介紹了對數組和內嵌文檔的查詢操作,尤其是對$elemMatch 同樣可以用在find方法的第二個參數來限制返回數組內的元素,只返回我們需要的文檔的介紹。我們經常在查詢條件查詢內嵌文檔數組時,只需要返回主文檔并返回內嵌文檔數組中我們只需要的值,而不是把內嵌文檔的數組都返回。
二、對數組根據條件查詢
$all、$size、$slice、$elemMatch
(1)$all查找數組中包含指定的值的文檔
語法:
{ field:{ $all: [ , ... ]}
例子:
db.orders.find({"books":{$all:["java","mongo"]}})
查找books包含java、mongo的文檔數據
(2)$size 查找數組大小等于指定值的文檔
語法:
{field:?{$size:?number?}?}
例子:
>db.orders.find({"books":{$size:2}})
(3)$slice查詢數組中指定返回元素的個數
語法:
>db.collect.find({},{field:{$slice:?number?}})
number 說明:
為正數表示返回前面指定的值的個數:例如1 返回數組第一個
為負數表示返回倒數指定的值的個數:例如-1返回數組倒數第一個
例子:
>db.orders.find({"onumber":{$in:["008","009"]}},{books:{$slice:1}})
1)$slice可以查詢數組中第幾個到第幾個
語法:
>db.collect.find({},{field:{$slice:[?number1,?number2]?}})
跳過數組的number1個位置然后返回number2個數
number1說明:
為正數表示跳到指定值的數組個數:例如2 跳到數組第3個
為負數表示跳到指定值的數組倒數個數:例如-2跳到到數組倒數第3個
例子:
>db.orders.find({"onumber":{$in:["008","009"]}},{books:{$slice:[1,1]}})
跳過books數組第一個元素,現在到數組第二個元素,并返回1個元素
三、對數組內嵌文檔查詢
我們先保存數據
db.?orders.insert([
{
"onumber"?:?"001",
"date"?:?"2015-07-02",
"cname"?:?"zcy1",
"items"?:[?{
"ino"?:?"001",
"quantity"?:2,
"price"?:?4.0
},{
"ino"?:?"002",
"quantity"?:?4,
"price"?:?6.0
}
]
},{
"onumber"?:?"002",
"date"?:?"2015-07-02",
"cname"?:?"zcy2",
"items"?:[?{
"ino"?:?"001",
"quantity"?:2,
"price"?:?4.0
},{
"ino"?:?"002",
"quantity"?:6,
"price"?:?6.0
}
]
}
])
(1)$elemMatch 文檔包含有一個元素是數組,那么$elemMatch可以匹配內數組內的元素并返回文檔數據
語法:
>{field:{$elemMatch:{?field1:value1,?field2:value2,………}}}
例子:
>db.orders.find({"items":{$elemMatch:{"quantity":2}}})
返回quantity為2的文檔
也可以這樣查詢db.orders.find({"items.quantity":2})
(2) $elemMatch可以帶多個查詢條件
例子:
>db.orders.find({"items":{$elemMatch:{"quantity":4,"ino":"002"}}})
我們查詢數組中的quantity等于4并且ino等于002,但是我們就想返回數組中的quantity等于4并且ino等于002的這個文檔,并不想把ino等于001等這些無關的文檔返回。
(3)$elemMatch 同樣可以用在find方法的第二個參數來限制返回數組內的元素,只返回我們需要的文檔
例子:
db.orders.find({"onumber":"001"},{"items":{$elemMatch:{"quantity":4,"ino":"002"}},"cname":1,"date":1,"onumber":1})
我們只返回quantity等于4并且ino等于002的文檔,無關的文檔沒有返回,方便我們處理數據,這樣也可以節省傳輸數據量,減少了內存消耗,提高了性能,在數據大時,性能很明顯的。
總結
以上是生活随笔為你收集整理的java mongo 查询数组_MongoDB查询(数组、内嵌文档)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt Console Applicati
- 下一篇: linux脚本运行出现bc,Linux硬