Maison >base de données >tutoriel mysql >Introduction aux opérations de requête courantes dans MongoDB (avec code)
Cet article vous présente une introduction aux opérations de requête courantes dans MongoDB (avec code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
Avant-propos : L'outil de visualisation utilisé est Studio 3T, site officiel-->https://studio3t.com/
Numéro de version : MongoDB shell version v3.4.2
Comment utiliser : https :/ /blog.csdn.net/weixin_...
Ce qu'il faut surveiller : focus sur les opérateurs.
Comment rechercher : appuyez sur ctrl+F sur cette page et entrez les mots-clés à rechercher
1. Requête couramment utilisée
Pour faciliter l'utilisation, supprimez tous les documents avant de les insérer. les données originales (Veuillez opérer avec prudence dans le projet !) :
db.getCollection("inventory").deleteMany({})
Voir tous les documents
db.getCollection("inventory").find({})
1. Recherche d'objet
1.1, données originales
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, recherche de documents avec size.h égal à 14, size.w égal à 21, size.uom égal à cm
db.inventory.find( { size: { h: 14, w: 21, uom: "cm" } } )
1.3. Rechercher des documents où size.uom est égal à dans
db.inventory.find( { "size.uom": "in" } )
Remarque : lorsque vous recherchez un seul attribut d'objet, veillez à ajouter des guillemets. !
1.4. Rechercher et renvoyer les champs spécifiés dans l'objet
db.inventory.find( { status: "A" }, { item: 1, status: 1, "size.uom": 1 } )
1.5. Rechercher et filtrer les champs spécifiés dans l'objet
db.inventory.find( { status: "A" }, { "size.uom": 0 } )
<.> 2. Recherche de tableau 2.1. Données originales
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. Recherche de documents avec des balises=["red", "blank"]
db.inventory.find( { tags: ["red", "blank"] } )
Remarque : il ne s'agit pas d'une relation d'inclusion, c'est-à-dire que les balises : ["red", "blank", "plain"] ne sont pas incluses
Rechercher des documents avec des balises contenant. rougedb.inventory.find( { tags: "red" } )
Remarque : vous ne pouvez pas écrire db.inventory.find( { tags: ["red"] } ) comme ceci, ce qui signifie rechercher des documents dont les balises sont rouges
3. Rechercher des objets contenus dans le tableau3.1. Données originales
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. non inclus), tant qu'il y a un objet dans le tableau Si les conditions sont remplies, l'ensemble du tableau
db.inventory.find( { "instock": { warehouse: "A", qty: 5 } } )
doit être strictement suivi dans l'ordre des champs Si l'ordre des. le champ est modifié, ce sera , comme suit : 找 不 到
db.inventory.find( { "instock": { qty: 5, warehouse: "A" } } )3.3 , Trouver l'objet élément dans le tableau, il y a un objet élément avec qty=5, ou l'objet (ou autre objet élément) Warehouse=A
db.inventory.find( { "instock.qty": 5, "instock.warehouse": "A" } )3.4, recherchez l'objet dans le tableau et renvoyez un certain attribut de l'objet
db.inventory.find( { status: "A" }, { item: 1, status: 1, "instock.qty": 1 } )
4. recherche4.1. Données originales
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. Interroger et renvoyer le champ spécifié
Sous la condition status=A, renvoyer les champs _id, item, status
db.inventory.find( { status: "A" }, { item: 1, status: 1 } )Résultat :
{ "_id" : ObjectId("5c91cd53e98d5972748780e1"), "item" : "journal", "status" : "A"} // ---------------------------------------------- { "_id" : ObjectId("5c91cd53e98d5972748780e2"), "item" : "notebook", "status" : "A"} // ---------------------------------------------- { "_id" : ObjectId("5c91cd53e98d5972748780e5"), "item" : "postcard", "status" : "A"}4.3 On peut voir à partir de la version 4.2 que _id est automatiquement apporté, vous pouvez donc supprimer, comme suit
Requête sans (supprimer) l'identifiant :
db.inventory.find( { status: "A" }, { item: 1, status: 1, _id: 0 } )
Remarque : En plus de l'identifiant, d'autres champs peuvent être conservés lors du filtrage, les autres champs ne peuvent pas être 0 en écrivant également 1 Par exemple :
db.inventory.find( { status: "A" }, { item: 1, status: 0 } )
signalera une erreur
4.4 Exclure des champs spécifiques et renvoyer d'autres champsdb.inventory.find( { status: "A" }, { status: 0, instock: 0 } )
5. Rechercher des clés nulles ou inexistantes5.1. Données originales
db.inventory.insertMany([ { _id: 1, item: null }, { _id: 2 } ])5.2. Rechercher des documents dont l'élément est nul, ou des documents qui ne contiennent pas d'élément
db.inventory.find( { item: null } )
2. Opérateurs
1. $lt moins de Données originales
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. Recherchez des collections de documents avec "size.h" inférieur à 15
db.inventory.find( { "size.h": { $lt: 15 } } )1.3 Utilisez $lt avec AND
pour trouver que size.h est inférieur à 15 et que size.uom est dans. , et le statut est le document de D
db.inventory.find( { "size.h": { $lt: 15 }, "size.uom": "in", status: "D" } )
2 $lte inférieur à égal inférieur ou égal à Données originales
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 } ] } ]);
db.inventory.find( { 'instock.qty': { $lte: 20 } } )3. supérieur à
3.1, données originales
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( { dim_cm: { $gt: 25 } } )Remarque : tant qu'il contient des éléments supérieurs à 25 Les tableaux sont tous qualifiés
3.3. Rechercher les documents dont dim_cm est supérieur à 15, ou inférieur à 20, ou les deux supérieurs à 15 et inférieurs à 20
3.4. Trouver dim_cm Les documents qui sont à la fois supérieurs à 22 et inférieurs à 30 (il s'agit de juger si un certain élément du tableau est supérieur à 22 et inférieur à 30, plutôt que de juger tous les éléments du tableau)db.inventory.find( { dim_cm: { $gt: 15, $lt: 20 } } )3.5. Recherche basée sur la position du tableau
db.inventory.find( { dim_cm: { $elemMatch: { $gt: 22, $lt: 30 } } } )Trouvez le
deuxième
document de dim_cm supérieur à 25
db.inventory.find( { "dim_cm.1": { $gt: 25 } } )4. la longueur du tableau
Rechercher les balises Document de longueur 3
db.inventory.find( { "tags": { $size: 3 } } )5 est supérieure ou égale à
5.1. Données originales
5.2. Tableau de recherche Une collection de documents dont le premier élément (objet) a une quantité supérieure ou égale à 20
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 } ] } ]);6 . Attribut d'objet $elemMatch correspondant à
db.inventory.find( { 'instock.0.qty': { $gte: 20 } } )
6.1 Recherchez la quantité dans le tableau =5, l'objet Warehouse="A" et renvoie la collection de documents
6.2. dans le tableau qui correspond à une quantité supérieure à 10
db.inventory.find( { "instock": { $elemMatch: { qty: 5, warehouse: "A" } } } )inférieure ou égale à 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视频教程栏目!
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!