日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java mongo 查询数组_MongoDB查询(数组、内嵌文档)

發布時間:2023/12/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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查询(数组、内嵌文档)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。