《MongoDB入门教程》第11篇 数组运算符
本文將會介紹 MongoDB 中查找數組元素相關的運算符,包括 $size、$all 以及 $elemMatch。
$size 運算符
$size 是一個數組查詢運算符,可以判斷文檔的字段是否包含指定數量的元素。
$size 運算符的語法如下:
{ array_field: {$size: element_count} }其中,array_field 是字段名,element_count 表示該字段包含的元素數量。
接下來的示例將會使用以下集合:
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 運算符查找數組字段 color 包含兩個元素的文檔:
db.products.find({color: {$size: 2} }, {name: 1,color: 1 })查詢返回的文檔如下:
{ "_id" : 1, "color" : [ "white", "black" ], "name" : "xPhone" }以下示例同時使用了 $size 運算符和 $or 運算符查找數組字段 color 包含一個或者兩個元素的文檔:
db.products.find({$or: [{color: {$size: 1}},{color: {$size: 2}}] }, {name: 1,color: 1 })查詢返回的結果如下:
{ "_id" : 1, "color" : [ "white", "black" ], "name" : "xPhone" } { "_id" : 3, "color" : [ "blue" ], "name" : "SmartTablet" }$all 運算符
$all 是一個數組查詢運算符,可以判斷文檔的字段是否包含指定的所有元素。
$all 運算符的語法如下:
{ <arrayField>: { $all: [element1, element2, ...]} }如果 $all 運算符后面的數組為空,不會匹配任何文檔。
如果 $all 運算符只有一個元素,應該使用表達式,而不是數組:
{ <arrayField>: element1 }$all 運算符可以使用等價的 $and 運算符實現:
{ $and: [{ arrayField: element1}, {arrayField: element2} ]}以下示例使用 $all 運算符查找 color 字段同時包含“black”和“white”兩個元素的文檔:
db.products.find({color: {$all: ["black", "white"]} }, {name: 1,color: 1 })查詢返回的結果如下:
{ "_id" : 1, "name" : "xPhone", "color" : [ "white", "black" ] } { "_id" : 2, "name" : "xTablet", "color" : [ "white", "black", "purple" ] }上面的示例也可以使用 $and 運算符實現:
db.products.find({$and: [{color: "black"},{color: "white"}] }, {name: 1,color: 1 })$elemMatch 運算符
$elemMatch 也是一個數組查詢運算符,可以判斷文檔是否包含指定數組字段,并且該字段至少包含一個滿足條件的元素。
$elemMatch 運算符的語法如下:
{ <arrayField>: {$elemMatch: { <query1>, <query2>, ...} } }注意,$elemMatch 運算符不支持 $where 表達式或者 $text 查詢表達式。
以下示例使用 $elemMatch 運算符查詢 products 集合中的文檔:
db.products.find({storage: {$elemMatch: {$lt: 128}} }, {name: 1,storage: 1 });查詢返回了數組字段 storage 中至少包含一個小于 128 的元素的文檔:
[{ _id: 1, name: 'xPhone', storage: [ 64, 128, 256 ] },{ _id: 3, name: 'SmartTablet', storage: [ 16, 64, 128 ] } ]總結
以上是生活随笔為你收集整理的《MongoDB入门教程》第11篇 数组运算符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++头文件<bits/stdc++.h
- 下一篇: 医学图像与高光谱图像