Dieser Artikel bietet Ihnen eine Einführung in gängige Abfrageoperationen in MongoDB (mit Code). Ich hoffe, dass er für Freunde hilfreich ist.
Vorwort: Das verwendete Visualisierungstool ist Studio 3T, offizielle Website-->https://studio3t.com/
Versionsnummer: MongoDB-Shell-Version v3.4.2
Verwendung: https :/ /blog.csdn.net/weixin_...
Was Sie sehen sollten: Konzentrieren Sie sich auf die Operatoren.
So suchen Sie: Drücken Sie auf dieser Seite Strg+F und geben Sie die zu suchenden Schlüsselwörter ein
1. Häufig verwendete Abfrage
Löschen Sie zur Vereinfachung der Bedienung alle Dokumente vor dem Einfügen die Originaldaten (Bitte vorsichtig im Projekt vorgehen!):
db.getCollection("inventory").deleteMany({})
0 Alle Dokumente anzeigen
db.getCollection("inventory").find({})
1. Objektsuche
1.1. Originaldaten
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. Suchen Sie nach Dokumenten, bei denen size.h gleich 14, size.w gleich 21 und size.uom gleich cm ist
db.inventory.find( { size: { h: 14, w: 21, uom: "cm" } } )
1.3. Finden Sie size.uom-Dokumente gleich in
db.inventory.find( { "size.uom": "in" } )
Hinweis: Achten Sie beim Nachschlagen einzelner Objekteigenschaften darauf, Anführungszeichen anzugeben!
1.4. Das angegebene Feld im Objekt suchen und zurückgeben
db.inventory.find( { status: "A" }, { item: 1, status: 1, "size.uom": 1 } )
1.5. Das angegebene Feld im Objekt suchen und filtern
2. Array-Suche 2.1. Originaldaten
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 ] } ]);
Hinweis: Dies ist nicht der Fall eine Einschlussbeziehung, d. h. Tags: ["red", "blank", "plain"] sind nicht enthalten
2.3 Suchen Sie nach Dokumenten mit Tags, die rotdb.inventory.find( { tags: ["red", "blank"] } )
3. Suchen Sie nach Objekten, die in einem Array enthalten sind Array, das die Bedingungen erfüllt, wird das gesamte Array zurückgegeben
db.inventory.find( { tags: "red" } )
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": { warehouse: "A", qty: 5 } } )
找 不 到
db.inventory.find( { "instock": { qty: 5, warehouse: "A" } } )
db.inventory.find( { "instock.qty": 5, "instock.warehouse": "A" } )
Unter der Bedingung Status=A, geben Sie _id, Artikel, Statusfelder zurückdb.inventory.find( { status: "A" }, { item: 1, status: 1, "instock.qty": 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 } ] } ]);
Abfrage ohne (entfernte) ID:
db.inventory.find( { status: "A" }, { item: 1, status: 1 } )
Hinweis: Zusätzlich zur ID, die unter Beibehaltung anderer Felder herausgefiltert werden kann , andere Felder dürfen nicht 0 sein und gleichzeitig 1 schreiben
, wie zum Beispiel:
{ "_id" : ObjectId("5c91cd53e98d5972748780e1"), "item" : "journal", "status" : "A"} // ---------------------------------------------- { "_id" : ObjectId("5c91cd53e98d5972748780e2"), "item" : "notebook", "status" : "A"} // ---------------------------------------------- { "_id" : ObjectId("5c91cd53e98d5972748780e5"), "item" : "postcard", "status" : "A"}
Es wird ein Fehler gemeldet
4.4. Bestimmte Felder ausschließen und andere Felder zurückgeben
5. Null- oder nicht vorhandene Schlüssel findenOriginaldaten
5.2. Finden Sie Dokumente, bei denen item null ist, oder Dokumente, die item nicht enthalten
2 Operatoren
$lt kleiner als
1.1, Originaldaten
db.inventory.find( { status: "A" }, { item: 1, status: 1, _id: 0 } )
1.2. Suchen Sie die Dokumentensammlung mit „size.h“ kleiner als 15db.inventory.find( { status: "A" }, { item: 1, status: 0 } )
, um Dokumente zu finden, bei denen size.h ist kleiner als 15, size.uom ist in und Status ist D. db.inventory.find( { status: "A" }, { status: 0, instock: 0 } )
2. $lte kleiner als gleich ist kleiner oder gleich
Originaldaten
db.inventory.insertMany([ { _id: 1, item: null }, { _id: 2 } ])
2.2. Suchen Sie nach Dokumenten mit instock.qty kleiner oder gleich 20. Solange ein Objekt im Array die Bedingungen erfüllt, wird das gesamte Array zurückgegeben
db.inventory.find( { item: null } )
3 , $gt größer als >3.1, Originaldaten
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" } ]);
db.inventory.find( { "size.h": { $lt: 15 } } )
Hinweis: solange es Elemente enthält Größer als 25 Arrays sind alle qualifiziert
3.3. Finden Sie Dokumente, bei denen dim_cm größer als 15 oder kleiner als 20 oder sowohl größer als 15 als auch kleiner als 20 ist
db.inventory.find( { "size.h": { $lt: 15 }, "size.uom": "in", status: "D" } )
3.4. Finden Sie Dokumente, bei denen dim_cm größer als 22 und weniger als 30 Dokumente ist (es geht darum, zu beurteilen, ob ein bestimmtes Element des Arrays größer als 22 und kleiner als 30 ist, anstatt alle Elemente des Arrays zu beurteilen)
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.5. Suche basierend auf der Array-PositionSuche Das zweite
Dokument von dim_cm ist größer als 25db.inventory.find( { 'instock.qty': { $lte: 20 } } )
4
Tags finden
Die Länge beträgt 3Dokument
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 ] } ]);
$gte ist größer oder gleichOriginaldaten
db.inventory.find( { dim_cm: { $gt: 25 } } )
db.inventory.find( { dim_cm: { $gt: 15, $lt: 20 } } )
6. Attributübereinstimmung mit dem $elemMatch-Objekt 6.1. Suchen Sie nach Objekten im Array, die mit qty=5, Warehouse="A" übereinstimmen, und geben Sie die Dokumentensammlung zurück
db.inventory.find( { dim_cm: { $elemMatch: { $gt: 22, $lt: 30 } } } )
kleiner oder gleich 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视频教程栏目!
Das obige ist der detaillierte Inhalt vonEinführung in gängige Abfrageoperationen in MongoDB (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!