この記事では、MongoDB の一般的な Query 操作の概要 (コード付き) を紹介します。これには一定の参考価値があります。必要な友人は参照してください。お役に立てば幸いです。
前書き: 使用した視覚化ツールは Studio 3T、公式 Web サイト -->https://studio3t.com/
バージョン番号: MongoDB シェル バージョン v3.4.2
使用方法: https :/ /blog.csdn.net/weixin_...
注目すべき点: 演算子に注目してください。
検索方法: このページで Ctrl F を押し、キーワードを入力して検索します。
1. よく使用されるクエリ
操作の便宜上、ドキュメントを挿入する前にすべてのドキュメントを削除してください。元のデータ ( プロジェクトでは慎重に操作してください! ):
db.getCollection("inventory").deleteMany({})
0. すべてのドキュメントを表示
db.getCollection("inventory").find({})
1. オブジェクトsearch
1.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.2. size.h が 14、size.w が 21、size.uom が cm
に等しいドキュメントを検索します。db.inventory.find( { size: { h: 14, w: 21, uom: "cm" } } )
1.3. size.uom が in
db.inventory.find( { "size.uom": "in" } )
のドキュメントと等しいことを確認します。 注: 個々のオブジェクトのプロパティを検索するときは、必ず引用符を含めてください。
1.4. オブジェクト
db.inventory.find( { status: "A" }, { item: 1, status: 1, "size.uom": 1 } )
db.inventory.find( { status: "A" }, { "size.uom": 0 } )
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 ] } ]);
db.inventory.find( { tags: ["red", "blank"] } )
db.inventory.find( { tags: "red" } )
3 であるドキュメントを検索することになります。配列に含まれるオブジェクトを検索
3.1. 元のデータ
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.2. 条件を満たす配列内のオブジェクトを検索します (含まれていません)。配列内にオブジェクトが存在する限り条件を満たす場合、配列全体が返されます。
db.inventory.find( { "instock": { warehouse: "A", qty: 5 } } )
フィールドの順序に厳密に従う必要があります。フィールドの順序が変更されると、 が見つかりません
、
db.inventory.find( { "instock": { qty: 5, warehouse: "A" } } )
3.3. 配列内の要素オブジェクトを見つけます。要素オブジェクトの qty=5 またはwarehouse=A
db.inventory.find( { "instock.qty": 5, "instock.warehouse": "A" } )
3.4. が 1 つあります。配列内のオブジェクトを取得し、オブジェクトの特定の属性を返します
db.inventory.find( { status: "A" }, { item: 1, status: 1, "instock.qty": 1 } )
4. 通常の検索
4.1. 元のデータ
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.2. 指定されたフィールドをクエリして返します
status=A の条件で、_id、item、status フィールドを返す
db.inventory.find( { status: "A" }, { item: 1, status: 1 } )
Result:
{ "_id" : ObjectId("5c91cd53e98d5972748780e1"), "item" : "journal", "status" : "A"} // ---------------------------------------------- { "_id" : ObjectId("5c91cd53e98d5972748780e2"), "item" : "notebook", "status" : "A"} // ---------------------------------------------- { "_id" : ObjectId("5c91cd53e98d5972748780e5"), "item" : "postcard", "status" : "A"}
4.3. 4.2 から、_id が自動的に引き継がれることがわかり、次のように削除されます。
ID のない (削除された) クエリ:
db.inventory.find( { status: "A" }, { item: 1, status: 1, _id: 0 } )
注: 他のフィールドを保持したままフィルターで除外できる ID に加えて、他のフィールド1
を書き込むと同時に 0 にすることはできません。例:
db.inventory.find( { status: "A" }, { item: 1, status: 0 } )
はエラーを報告します
4.4。特定のフィールドを除外し、他のフィールドを返す
db.inventory.find( { status: "A" }, { status: 0, instock: 0 } )
5. null または存在しないキーを検索
5.1. 元のデータ
db.inventory.insertMany([ { _id: 1, item: null }, { _id: 2 } ])
5.2. item が存在するドキュメントを検索null、または item
db.inventory.find( { item: null } )
2 を含まないドキュメント。演算子
1、$lt 未満未満
1.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.2、「size.h」が 15 未満のドキュメント コレクションを検索します
db.inventory.find( { "size.h": { $lt: 15 } } )
1.3. $lt を AND で使用します
size.h が 15 未満であるドキュメントを検索します。 .uom が入っており、ステータスは D
db.inventory.find( { "size.h": { $lt: 15 }, "size.uom": "in", status: "D" } )
2.$lte 未満は
#2.1 以下、元のデータ
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.2 です。 instock.qty が 20 以下のドキュメントを検索し、配列内の 1 つのオブジェクトが条件を満たしている限り、配列全体を返します。
db.inventory.find( { 'instock.qty': { $lte: 20 } } )
3、$gt が以上
3.1、元のデータ
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.2、dim_cmが25より大きいドキュメントを検索
db.inventory.find( { dim_cm: { $gt: 25 } } )
注: 25を超える要素の配列が含まれている限り、すべて修飾されます
3.3. dim_cm が 15 より大きい、20 未満、または 15 より大きく 20 未満の両方であるドキュメントを検索します。
db.inventory.find( { dim_cm: { $gt: 15, $lt: 20 } } )
3.4、dim_cm が 22 より大きく、かつ 22 より大きいドキュメントを検索します。 30 未満 (配列のすべての要素を判定するのではなく、配列の特定の要素が 22 より大きく 30 未満であるかどうかを判定します)
db.inventory.find( { dim_cm: { $elemMatch: { $gt: 22, $lt: 30 } } } )
3.5. 配列の位置に応じて検索
dim_cm の second 要素が 25 を超えるドキュメントを検索
db.inventory.find( { "dim_cm.1": { $gt: 25 } } )
4, $size 配列の長さに応じて検索
タグを検索 長さ 3
db.inventory.find( { "tags": { $size: 3 } } )
5 のドキュメント、$gte は
#5.1 以上、元のデータ
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.2、配列の最初の要素を検索します 数量 (オブジェクト) が 20
db.inventory.find( { 'instock.0.qty': { $gte: 20 } } )
6 以上であるドキュメントのコレクション $elemMatch オブジェクト属性の一致
6.1. 検索対象qty=5、warehouse="A " オブジェクトの配列を取得し、ドキュメント コレクション
db.inventory.find( { "instock": { $elemMatch: { qty: 5, warehouse: "A" } } } )
6.2 を返します。配列内で 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 } } )
7、$slice 返回数组特定位置的元素
7.1、原数据
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.2、查找并返回 tags 数组的最后一个元素
db.inventory.find( { item: "journal" }, { item: 1, qty: 0, tags: { $slice: -1 } } )
结果:
{ "_id" : ObjectId("5c91dce5e98d5972748780e6"), "item" : "journal", "tags" : [ "red" ] }
8、$type 返回指定类型的元素
8.1、原数据
db.inventory.insertMany([ { _id: 1, item: null }, { _id: 2 } ])
8.2、返回 null 类型的数据
db.inventory.find( { item : { $type: 10 } } )
类型如下:
详细文档请看:https://docs.mongodb.com/manu...
9、$exists 返回存在/不存在的键
查找不存在 item 键的数据
db.inventory.find( { item : { $exists: false } } )
10、$all 包含
10.1、原数据
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.2、查找 tags 数组包含 ["red", "blank"] 的文档
db.inventory.find( { tags: { $all: ["red", "blank"] } } )
综上:
数组用的:$all
、$size
、$slice
对象用的:$elemMatch
Query查询的详细文档请看:https://docs.mongodb.com/manu...
Operator的详细文档请看:https://docs.mongodb.com/manu...
本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的mongodb视频教程栏目!
以上がMongoDB の一般的なクエリ操作の概要 (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。