前言:使用的可視化工具是 Studio 3T,官網-->studio3t.com/ 版本號:MongoDB shell version v3.4.2 如何使用:blog.csdn.net/weixin_3999… 看點:重點看操做符那塊。 如何查找:在此頁面按 ctrl+F 輸入關鍵字查找mongodb
1、經常使用Query 爲方便操做,在插入原數據前,先刪除全部文檔(在項目中請謹慎操做!):shell
db.getCollection("inventory").deleteMany({})
複製代碼
0、查看全部文檔數組
db.getCollection("inventory").find({})
複製代碼
一、對象查找 1.一、原數據bash
db.inventory.insertMany( [
{ item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
{ item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },
{ item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
{ item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
{ item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }
]);
複製代碼
1.二、查找 size.h 等於 14,size.w 等於 21,size.uom 等於 cm 的文檔less
db.inventory.find( { size: { h: 14, w: 21, uom: "cm" } } )
複製代碼
1.三、查找 size.uom 等於 in 的文檔工具
db.inventory.find( { "size.uom": "in" } )
複製代碼
注意:當查找單個對象屬性時,務必加上引號!post
1.四、查找並返回對象裏的指定字段spa
db.inventory.find(
{ status: "A" },
{ item: 1, status: 1, "size.uom": 1 }
)
複製代碼
1.五、查找並過濾對象裏的指定字段.net
db.inventory.find(
{ status: "A" },
{ "size.uom": 0 }
)
複製代碼
二、數組查找 2.一、原數據3d
db.inventory.insertMany([
{ item: "journal", qty: 25, tags: ["blank", "red"], dim_cm: [ 14, 21 ] },
{ item: "notebook", qty: 50, tags: ["red", "blank"], dim_cm: [ 14, 21 ] },
{ item: "paper", qty: 100, tags: ["red", "blank", "plain"], dim_cm: [ 14, 21 ] },
{ item: "planner", qty: 75, tags: ["blank", "red"], dim_cm: [ 22.85, 30 ] },
{ item: "postcard", qty: 45, tags: ["blue"], dim_cm: [ 10, 15.25 ] }
]);
複製代碼
2.二、查找 tags=["red", "blank"] 的文檔
db.inventory.find( { tags: ["red", "blank"] } )
複製代碼
注意:不是包含關係,即 tags: ["red", "blank", "plain"] 是不包括在內的
2.三、查找 tags 包含 red 的文檔
db.inventory.find( { tags: "red" } )
複製代碼
注意:不能這麼寫 db.inventory.find( { tags: ["red"] } ),這樣就表示查找 tags 是 red 的文檔
三、數組中包含對象的查找 3.一、原數據
db.inventory.insertMany( [
{ item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 } ] },
{ item: "notebook", instock: [ { warehouse: "C", qty: 5 } ] },
{ item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 15 } ] },
{ item: "planner", instock: [ { warehouse: "A", qty: 40 }, { warehouse: "B", qty: 5 } ] },
{ item: "postcard", instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }
]);
複製代碼
3.二、查找數組中有一個對象符合條件的(不是包含),只要數組中有一個對象符合條件就返回整個數組
db.inventory.find( { "instock": { warehouse: "A", qty: 5 } } )
複製代碼
要嚴格按照字段的順序來,若是調換字段順序會 找 不 到
,以下:
db.inventory.find( { "instock": { qty: 5, warehouse: "A" } } )
複製代碼
3.三、查找數組中的元素對象,有一個元素對象的qty=5,或者該對象(或者是其餘元素對象)的warehouse=A
db.inventory.find( { "instock.qty": 5, "instock.warehouse": "A" } )
複製代碼
3.四、查找數組中的對象,並返回對象的某個屬性
db.inventory.find( { status: "A" }, { item: 1, status: 1, "instock.qty": 1 } )
複製代碼
四、普通查找 4.一、原數據
db.inventory.insertMany( [
{ item: "journal", status: "A", size: { h: 14, w: 21, uom: "cm" }, instock: [ { warehouse: "A", qty: 5 } ] },
{ item: "notebook", status: "A", size: { h: 8.5, w: 11, uom: "in" }, instock: [ { warehouse: "C", qty: 5 } ] },
{ item: "paper", status: "D", size: { h: 8.5, w: 11, uom: "in" }, instock: [ { warehouse: "A", qty: 60 } ] },
{ item: "planner", status: "D", size: { h: 22.85, w: 30, uom: "cm" }, instock: [ { warehouse: "A", qty: 40 } ] },
{ item: "postcard", status: "A", size: { h: 10, w: 15.25, uom: "cm" }, instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }
]);
複製代碼
4.二、查詢並返回指定字段 在 status=A 的條件下,返回 _id,item,status 字段
db.inventory.find( { status: "A" }, { item: 1, status: 1 } )
複製代碼
結果:
{ "_id" : ObjectId("5c91cd53e98d5972748780e1"),
"item" : "journal",
"status" : "A"}
// ----------------------------------------------
{ "_id" : ObjectId("5c91cd53e98d5972748780e2"),
"item" : "notebook",
"status" : "A"}
// ----------------------------------------------
{ "_id" : ObjectId("5c91cd53e98d5972748780e5"),
"item" : "postcard",
"status" : "A"}
複製代碼
4.三、由 4.2 可知,_id 是自動帶着的,能夠去掉,以下 查詢不帶(去掉) id :
db.inventory.find( { status: "A" }, { item: 1, status: 1, _id: 0 } )
複製代碼
注意:除了 id 能夠在過濾掉的同時,還去保留其餘字段外,其餘字段不能在 0 的同時,還寫 1 如:
db.inventory.find( { status: "A" }, { item: 1, status: 0 } )
複製代碼
會報錯
4.四、排除特定字段,返回其餘字段
db.inventory.find( { status: "A" }, { status: 0, instock: 0 } )
複製代碼
五、查找 null 或不存在的 鍵 5.一、原數據
db.inventory.insertMany([
{ _id: 1, item: null },
{ _id: 2 }
])
複製代碼
5.二、查找 item 爲 null 的文檔,或者不包含 item 的文檔
db.inventory.find( { item: null } )
複製代碼
2、操做符 一、$lt less than 小於 1.一、原數據
db.inventory.insertMany( [
{ item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
{ item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },
{ item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
{ item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
{ item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }
]);
複製代碼
1.二、查找 "size.h" 小於 15 的文檔集合
db.inventory.find( { "size.h": { $lt: 15 } } )
複製代碼
1.三、$lt 與 AND 聯用 查找 size.h 小於 15,而且 size.uom 是 in ,而且 status 是 D 的文檔
db.inventory.find( { "size.h": { $lt: 15 }, "size.uom": "in", status: "D" } )
複製代碼
二、$lte less than equal 小於等於 2.一、原數據
db.inventory.insertMany( [
{ item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 } ] },
{ item: "notebook", instock: [ { warehouse: "C", qty: 5 } ] },
{ item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 15 } ] },
{ item: "planner", instock: [ { warehouse: "A", qty: 40 }, { warehouse: "B", qty: 5 } ] },
{ item: "postcard", instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }
]);
複製代碼
2.二、查找 instock.qty 小於等於 20 的文檔,只要數組中有一個對象符合條件就返回整個數組
db.inventory.find( { 'instock.qty': { $lte: 20 } } )
複製代碼
三、$gt greater than 大於 3.一、原數據
db.inventory.insertMany([
{ item: "journal", qty: 25, tags: ["blank", "red"], dim_cm: [ 14, 21 ] },
{ item: "notebook", qty: 50, tags: ["red", "blank"], dim_cm: [ 14, 21 ] },
{ item: "paper", qty: 100, tags: ["red", "blank", "plain"], dim_cm: [ 14, 21 ] },
{ item: "planner", qty: 75, tags: ["blank", "red"], dim_cm: [ 22.85, 30 ] },
{ item: "postcard", qty: 45, tags: ["blue"], dim_cm: [ 10, 15.25 ] }
]);
複製代碼
3.二、查找 dim_cm 大於 25 的文檔
db.inventory.find( { dim_cm: { $gt: 25 } } )
複製代碼
注意:只要包含大於 25 的元素的數組,都是符合條件的
3.三、查找 dim_cm 大於 15,或小於 20,或既大於 15,又小於 20 的文檔
db.inventory.find( { dim_cm: { $gt: 15, $lt: 20 } } )
複製代碼
3.四、查找 dim_cm 既大於 22,又小於 30 的文檔(是判斷數組的某一個元素是不是大於22,且小於30的,而不是判斷數組的全部元素)
db.inventory.find( { dim_cm: { $elemMatch: { $gt: 22, $lt: 30 } } } )
複製代碼
3.五、根據數組位置查找 查找 dim_cm 的第二個元素 大於 25 的文檔
db.inventory.find( { "dim_cm.1": { $gt: 25 } } )
複製代碼
四、$size 根據數組長度查找 查找 tags 長度是 3 的文檔
db.inventory.find( { "tags": { $size: 3 } } )
複製代碼
五、$gte 大於等於 5.一、原數據
db.inventory.insertMany( [
{ item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 } ] },
{ item: "notebook", instock: [ { warehouse: "C", qty: 5 } ] },
{ item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 15 } ] },
{ item: "planner", instock: [ { warehouse: "A", qty: 40 }, { warehouse: "B", qty: 5 } ] },
{ item: "postcard", instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }
]);
複製代碼
5.二、查找數組的第一個元素(對象)的qty 大於等於 20 的文檔集合
db.inventory.find( { 'instock.0.qty': { $gte: 20 } } )
複製代碼
六、$elemMatch 對象的屬性匹配 6.一、在數組中查找符合 qty=5, warehouse="A" 的對象,並返回該文檔集合
db.inventory.find( { "instock": { $elemMatch: { qty: 5, warehouse: "A" } } } )
複製代碼
6.二、在數組中查找符合 qty 大於 10 而且小於等於 20 的文檔集合
db.inventory.find( { "instock": { $elemMatch: { qty: { $gt: 10, $lte: 20 } } } } )
複製代碼
若是不使用 $elemMatch 的話,就表示 qty 大於 10 或者
小於等於 20,官方文檔意思是,不在數組的某一個元素找 既知足條件 A 又知足條件 B 的 qty,而是在數組的全部元素上找,知足條件 A 或知足條件 B 的 qty
db.inventory.find( { "instock.qty": { $gt: 10, $lte: 20 } } )
複製代碼
七、$slice 返回數組特定位置的元素 7.一、原數據
db.inventory.insertMany([
{ item: "journal", qty: 25, tags: ["blank", "red"], dim_cm: [ 14, 21 ] },
{ item: "notebook", qty: 50, tags: ["red", "blank"], dim_cm: [ 14, 21 ] },
{ item: "paper", qty: 100, tags: ["red", "blank", "plain"], dim_cm: [ 14, 21 ] },
{ item: "planner", qty: 75, tags: ["blank", "red"], dim_cm: [ 22.85, 30 ] },
{ item: "postcard", qty: 45, tags: ["blue"], dim_cm: [ 10, 15.25 ] }
]);
複製代碼
7.二、查找並返回 tags 數組的最後一個元素
db.inventory.find( { item: "journal" }, { item: 1, qty: 0, tags: { $slice: -1 } } )
複製代碼
結果:
{
"_id" : ObjectId("5c91dce5e98d5972748780e6"),
"item" : "journal",
"tags" : [
"red"
]
}
複製代碼
八、$type 返回指定類型的元素 8.一、原數據
db.inventory.insertMany([
{ _id: 1, item: null },
{ _id: 2 }
])
複製代碼
8.二、返回 null 類型的數據
db.inventory.find( { item : { $type: 10 } } )
複製代碼
類型以下:
詳細文檔請看:docs.mongodb.com/manual/refe…
九、$exists 返回存在/不存在的鍵 查找不存在 item 鍵的數據
db.inventory.find( { item : { $exists: false } } )
複製代碼
十、$all 包含 10.一、原數據
db.inventory.insertMany([
{ item: "journal", qty: 25, tags: ["blank", "red"], dim_cm: [ 14, 21 ] },
{ item: "notebook", qty: 50, tags: ["red", "blank"], dim_cm: [ 14, 21 ] },
{ item: "paper", qty: 100, tags: ["red", "blank", "plain"], dim_cm: [ 14, 21 ] },
{ item: "planner", qty: 75, tags: ["blank", "red"], dim_cm: [ 22.85, 30 ] },
{ item: "postcard", qty: 45, tags: ["blue"], dim_cm: [ 10, 15.25 ] }
]);
複製代碼
10.二、查找 tags 數組包含 ["red", "blank"] 的文檔
db.inventory.find( { tags: { $all: ["red", "blank"] } } )
複製代碼
綜上: 數組用的:$all
、$size
、$slice
對象用的:$elemMatch
Query查詢的詳細文檔請看:docs.mongodb.com/manual/tuto… Operator的詳細文檔請看:docs.mongodb.com/manual/refe…
(完)