《MongoDB入门教程》第11篇 数组运算符
本文將會(huì)介紹 MongoDB 中查找數(shù)組元素相關(guān)的運(yùn)算符,包括 $size、$all 以及 $elemMatch。
$size 運(yùn)算符
$size 是一個(gè)數(shù)組查詢運(yùn)算符,可以判斷文檔的字段是否包含指定數(shù)量的元素。
$size 運(yùn)算符的語(yǔ)法如下:
{ array_field: {$size: element_count} }其中,array_field 是字段名,element_count 表示該字段包含的元素?cái)?shù)量。
接下來(lái)的示例將會(huì)使用以下集合:
db.products.insertMany([{ "_id" : 1, "name" : "xPhone", "price" : 799, "releaseDate" : ISODate("2011-05-14T00:00:00Z"), "spec" : { "ram" : 4, "screen" : 6.5, "cpu" : 2.66 }, "color" : [ "white", "black" ], "storage" : [ 64, 128, 256 ] },{ "_id" : 2, "name" : "xTablet", "price" : 899, "releaseDate" : ISODate("2011-09-01T00:00:00Z"), "spec" : { "ram" : 16, "screen" : 9.5, "cpu" : 3.66 }, "color" : [ "white", "black", "purple" ], "storage" : [ 128, 256, 512 ] },{ "_id" : 3, "name" : "SmartTablet", "price" : 899, "releaseDate" : ISODate("2015-01-14T00:00:00Z"), "spec" : { "ram" : 12, "screen" : 9.7, "cpu" : 3.66 }, "color" : [ "blue" ], "storage" : [ 16, 64, 128 ] },{ "_id" : 4, "name" : "SmartPad", "price" : 699, "releaseDate" : ISODate("2020-05-14T00:00:00Z"), "spec" : { "ram" : 8, "screen" : 9.7, "cpu" : 1.66 }, "color" : [ "white", "orange", "gold", "gray" ], "storage" : [ 128, 256, 1024 ] },{ "_id" : 5, "name" : "SmartPhone", "price" : 599, "releaseDate" : ISODate("2022-09-14T00:00:00Z"), "spec" : { "ram" : 4, "screen" : 9.7, "cpu" : 1.66 }, "color" : [ "white", "orange", "gold", "gray" ], "storage" : [ 128, 256 ] },{ "_id" : 6, "name" : "xWidget", "spec" : { "ram" : 64, "screen" : 9.7, "cpu" : 3.66 }, "color" : [ "black" ], "storage" : [ 1024 ] } ])以下示例使用 $size 運(yùn)算符查找數(shù)組字段 color 包含兩個(gè)元素的文檔:
db.products.find({color: {$size: 2} }, {name: 1,color: 1 })查詢返回的文檔如下:
{ "_id" : 1, "color" : [ "white", "black" ], "name" : "xPhone" }以下示例同時(shí)使用了 $size 運(yùn)算符和 $or 運(yùn)算符查找數(shù)組字段 color 包含一個(gè)或者兩個(gè)元素的文檔:
db.products.find({$or: [{color: {$size: 1}},{color: {$size: 2}}] }, {name: 1,color: 1 })查詢返回的結(jié)果如下:
{ "_id" : 1, "color" : [ "white", "black" ], "name" : "xPhone" } { "_id" : 3, "color" : [ "blue" ], "name" : "SmartTablet" }$all 運(yùn)算符
$all 是一個(gè)數(shù)組查詢運(yùn)算符,可以判斷文檔的字段是否包含指定的所有元素。
$all 運(yùn)算符的語(yǔ)法如下:
{ <arrayField>: { $all: [element1, element2, ...]} }如果 $all 運(yùn)算符后面的數(shù)組為空,不會(huì)匹配任何文檔。
如果 $all 運(yùn)算符只有一個(gè)元素,應(yīng)該使用表達(dá)式,而不是數(shù)組:
{ <arrayField>: element1 }$all 運(yùn)算符可以使用等價(jià)的 $and 運(yùn)算符實(shí)現(xiàn):
{ $and: [{ arrayField: element1}, {arrayField: element2} ]}以下示例使用 $all 運(yùn)算符查找 color 字段同時(shí)包含“black”和“white”兩個(gè)元素的文檔:
db.products.find({color: {$all: ["black", "white"]} }, {name: 1,color: 1 })查詢返回的結(jié)果如下:
{ "_id" : 1, "name" : "xPhone", "color" : [ "white", "black" ] } { "_id" : 2, "name" : "xTablet", "color" : [ "white", "black", "purple" ] }上面的示例也可以使用 $and 運(yùn)算符實(shí)現(xiàn):
db.products.find({$and: [{color: "black"},{color: "white"}] }, {name: 1,color: 1 })$elemMatch 運(yùn)算符
$elemMatch 也是一個(gè)數(shù)組查詢運(yùn)算符,可以判斷文檔是否包含指定數(shù)組字段,并且該字段至少包含一個(gè)滿足條件的元素。
$elemMatch 運(yùn)算符的語(yǔ)法如下:
{ <arrayField>: {$elemMatch: { <query1>, <query2>, ...} } }注意,$elemMatch 運(yùn)算符不支持 $where 表達(dá)式或者 $text 查詢表達(dá)式。
以下示例使用 $elemMatch 運(yùn)算符查詢 products 集合中的文檔:
db.products.find({storage: {$elemMatch: {$lt: 128}} }, {name: 1,storage: 1 });查詢返回了數(shù)組字段 storage 中至少包含一個(gè)小于 128 的元素的文檔:
[{ _id: 1, name: 'xPhone', storage: [ 64, 128, 256 ] },{ _id: 3, name: 'SmartTablet', storage: [ 16, 64, 128 ] } ]總結(jié)
以上是生活随笔為你收集整理的《MongoDB入门教程》第11篇 数组运算符的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++头文件<bits/stdc++.h
- 下一篇: 医学图像与高光谱图像