Heim  >  Artikel  >  Datenbank  >  Einführung in gängige Abfrageoperationen in MongoDB (mit Code)

Einführung in gängige Abfrageoperationen in MongoDB (mit Code)

不言
不言nach vorne
2019-03-23 16:39:593627Durchsuche

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 rot

db.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
wie folgt:

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 Suche

4.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ück

db.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 finden

Einführung in gängige Abfrageoperationen in MongoDB (mit Code)Originaldaten

rrree

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 15

db.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 25

db.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 } } )

类型如下:

Einführung in gängige Abfrageoperationen in MongoDB (mit Code)

详细文档请看: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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen