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 } )2.2. Dokumente mit Tags=["red", "blank"]
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"] } )Hinweis: Sie können db.inventory.find( { tags: ["red"] } ) nicht so schreiben, was bedeutet, dass Sie nach Dokumenten suchen, deren Tags rot sind
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" } )Befolgen Sie strikt die Reihenfolge der Felder. Wenn die Reihenfolge der Felder geändert wird, lautet sie
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.3. Suchen Sie das Elementobjekt im Array. Es gibt ein Elementobjekt mit qty=5 oder Warehouse=A
db.inventory.find( { "instock": { warehouse: "A", qty: 5 } } )3.4 des Objekts (oder anderer Elementobjekte). , finde das Objekt im Array und gebe ein bestimmtes Attribut des Objekts zurück
找 不 到
db.inventory.find( { "instock": { qty: 5, warehouse: "A" } } )4. Normale Suche4.1, Originaldaten
db.inventory.find( { "instock.qty": 5, "instock.warehouse": "A" } )4.2, Abfrage und geben Sie die angegebenen Felder zurück
Unter der Bedingung Status=A, geben Sie _id, Artikel, Statusfelder zurückdb.inventory.find( { status: "A" }, { item: 1, status: 1, "instock.qty": 1 } )
Ergebnis:
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.3. Aus 4.2 geht hervor, dass _id automatisch ist getragen und kann wie folgt entfernt werden
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
rrree5.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 } )
1.3. Verwenden Sie $lt mit AND
, 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" } ]);3.2, Dokumente mit dim_cm größer als 25 finden
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 } } )5.2. Finden Sie die Menge des ersten Elements (Objekts) der Array-Dokumentensammlung größer oder gleich 20
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 } } } )6.2. Suchen Sie die Dokumentensammlung im Array, die mit qty größer als 10 und
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!