ホームページ > データベース > mysql チュートリアル > MongoDB の一般的なクエリ操作の概要 (コード付き)

MongoDB の一般的なクエリ操作の概要 (コード付き)

不言
リリース: 2019-03-23 16:39:59
転載
3665 人が閲覧しました

この記事では、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 }
)
ログイン後にコピー

1 で指定されたフィールドを検索して返します。1.5. オブジェクト

db.inventory.find(
   { status: "A" },
   { "size.uom": 0 }
)
ログイン後にコピー
2 で指定されたフィールドを検索してフィルターします。配列検索
2.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 ] }
]);
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
2.2. tags=["red", "blank"]

db.inventory.find( { tags: ["red", "blank"] } )
ログイン後にコピー
を持つドキュメントの検索 注: そうではありません。包含関係、つまり、タグ ["red"、"blank"、"plain"] は含まれません

2.3. タグに red

db.inventory.find( { tags: "red" } )
ログイン後にコピー
## が含まれるドキュメントを検索します#注意: このように db.inventory.find( { tags: ["red"] } ) を記述することはできません。つまり、タグが 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 } )
ログイン後にコピー

はエラーを報告します

MongoDB の一般的なクエリ操作の概要 (コード付き)

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 } } )
ログイン後にコピー

类型如下:

MongoDB の一般的なクエリ操作の概要 (コード付き)

详细文档请看: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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート