Skip to content
Snippets Groups Projects
Commit d297c4be authored by Marcel Huber's avatar Marcel Huber
Browse files

mongodb queries extended/improved

parent 7864e660
No related branches found
No related tags found
No related merge requests found
......@@ -309,65 +309,86 @@ Antworten!
behandelt (Interessierte suchen nach "Joins in MongoDB" mit
`$lookup`).
2.4.1: Gegeben folgende Daten (???), notieren Sie die Ausgabe und
beschreiben Sie die Query in knappen Worten.
(???) `find` mit filter, bspw. `..., loves: { $all/$in:\[...\]}`
Dokumente in der `inventory` Collection für die nachfolgenden Queries:
``` js
db.inventory.find( { qty: { $exists: true, $in: [ 5, 15 ] } } )
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 ] }
]);
```
<!-- SOLUTION
$`\Rightarrow`$ *Antwort: This query will select all documents in the inventory collection where the qty field exists and its value is equal to 5 or 15.*
SOLUTION -->
2.4.2: Update Falle
Notieren Sie jeweils die Ausgabe und beschreiben Sie die Query in
knappen Worten.
Bei Update muss man `$set/$push/$inc` brauchen, um Änderungen an einem
bestehenden Dokument inkrementell durchzuführen.
Queries:
Frage:
1. \_
- In einem Update soll die quantity aller products mit benannter sku
und quantity \> 0 um 1 dekrementiert werden. Zusätzlich soll
vermerkt werden, wer die Änderung gerade durchführt:
``` js
db.inventory.find( { qty: { $exists: true, $in: [ 15, 45 ] } } )
```
<!-- SOLUTION
``` js
db.products.update ( { sku: "SomeSkuID", quantity: { $gt: 0 } },
{ $inc: { quantity: -1 },
$push: { checkout: { by: "OtherUserID", date: new Date() } } } )
{ item: "postcard", qty: 45, tags: ["blue"], dim_cm: [ 10, 15.25 ] }
```
*Select all documents in the inventory collection where the qty field exists and its value is equal to 15 or 45.*
SOLUTION -->
2.4.3 Was wird bei dieser Query ausgegeben?
2. \_
``` js
db.products.find({"name":"Tshirt"} , {name:1, price:1, size:1})
db.inventory.find({"item":"paper"} , {item:1, qty:1, tags:1})
```
<!-- SOLUTION
$`\Rightarrow`$ `_id, name, price, size`
``` js
{ _id: ObjectId("..."), item: "paper", qty: 100, tags: ["red", "blank", "plain"]}
```
$`\Rightarrow`$ Suche wird auf `paper` Items eingeschränkt. Vom Dokument werden nur bestimmte Attributwerte ausgegeben.
SOLUTION -->
2.4.4. Was fehlt um `_id` zu unterdrücken?
3. Ergänzen Sie die Query von 2. um die `_id` zu unterdrücken?
<!-- SOLUTION
$`\Rightarrow`$ `_id:0`
``` js
db.products.find({"name":"Tshirt"} , {name:1, price:1, size:1, _id:0})
db.inventory.find({"item":"paper"} , {item:1, qty:1, tags:1, _id:0})
```
SOLUTION -->
2.4.5: Was bewirkt `$elemMatch` in folgender Query?
4. Was bewirkt
[`$elemMatch`](https://docs.mongodb.com/manual/reference/operator/query/elemMatch/#op._S_elemMatch)
in folgender Query?
``` js
db.scores.find({ results: { $elemMatch: { $gte: 80, $lt: 85 } } })
db.inventory.find({ dim_cm: { $elemMatch: { $gte: 22, $lt: 25 } } })
```
<!-- SOLUTION
$`\Rightarrow`$ `{ "_id" : 1, "results" : [ 82, 85, 88 ] }`
``` js
{ item: "planner", qty: 75, tags: ["blank", "red"], dim_cm: [ 22.85, 30 ] },
```
*It matches only those documents where the results array contains ***at least one element*** that is both greater than or equal to 22 and is less than 25.*
SOLUTION -->
5. In einem Update soll die `qty` aller Dokumente der Collection
`inventory` mit `tags` `red` und qty \> 40 um 1 dekrementiert
werden.
<!--
Update Falle
Bei Update muss man `$set/$push/$inc` brauchen, um Änderungen an einem
bestehenden Dokument inkrementell durchzuführen.
Zusätzlich soll vermerkt werden, wer die Änderung gerade durchführt...
-->
<!-- SOLUTION
``` js
db.inventory.update ( { tags: { $in: ["red"] }, qty: { $gt: 40 } },
{ $inc: { qty: -1 } } )
```
SOLUTION -->
Hinweis: `$elemMatch`: Siehe MongoDB-Doku.
## Aufgaben 3: Neo4J - Prüfungsfragen
......@@ -428,9 +449,9 @@ Cypher Query Fragen:
└───────────┘
```
*Hinweis*
Warum wird *Dune* nicht aufgelistet?
- Warum wird *Dune* nicht aufgelistet: Bei der Patternerkennung stellt Neo4j sicher, dass keine Übereinstimmungen enthalten sind, bei denen die gleiche Diagrammbeziehung in einem einzigen Pattern (`MATCH`) mehrfach vorkommt. In den meisten Anwendungsfällen ist dies sinnvoll.
Bei der Patternerkennung stellt Neo4j sicher, dass keine Übereinstimmungen enthalten sind, bei denen die gleiche Diagrammbeziehung in einem einzigen Pattern (`MATCH`) mehrfach vorkommt. In den meisten Anwendungsfällen ist dies sinnvoll.
SOLUTION -->
- Erstellen Sie ein Query um eine Liste der Buchtitel mit deren
Authoren auszugeben.
......
......@@ -302,61 +302,87 @@ Antworten!
behandelt (Interessierte suchen nach "Joins in MongoDB" mit
`$lookup`).
2.4.1: Gegeben folgende Daten (???), notieren Sie die Ausgabe und
beschreiben Sie die Query in knappen Worten.
(???) `find` mit filter, bspw. `..., loves: { $all/$in:\[...\]}`
Dokumente in der `inventory` Collection für die nachfolgenden Queries:
``` js
db.inventory.find( { qty: { $exists: true, $in: [ 5, 15 ] } } )
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 ] }
]);
```
$`\Rightarrow`$ *Antwort: This query will select all documents in the
inventory collection where the qty field exists and its value is equal
to 5 or 15.*
2.4.2: Update Falle
Notieren Sie jeweils die Ausgabe und beschreiben Sie die Query in
knappen Worten.
Bei Update muss man `$set/$push/$inc` brauchen, um Änderungen an einem
bestehenden Dokument inkrementell durchzuführen.
Queries:
Frage:
1. \_
- In einem Update soll die quantity aller products mit benannter sku
und quantity \> 0 um 1 dekrementiert werden. Zusätzlich soll
vermerkt werden, wer die Änderung gerade durchführt:
``` js
db.inventory.find( { qty: { $exists: true, $in: [ 15, 45 ] } } )
```
``` js
db.products.update ( { sku: "SomeSkuID", quantity: { $gt: 0 } },
{ $inc: { quantity: -1 },
$push: { checkout: { by: "OtherUserID", date: new Date() } } } )
{ item: "postcard", qty: 45, tags: ["blue"], dim_cm: [ 10, 15.25 ] }
```
2.4.3 Was wird bei dieser Query ausgegeben?
*Select all documents in the inventory collection where the qty
field exists and its value is equal to 15 or 45.*
2. \_
``` js
db.products.find({"name":"Tshirt"} , {name:1, price:1, size:1})
db.inventory.find({"item":"paper"} , {item:1, qty:1, tags:1})
```
$`\Rightarrow`$ `_id, name, price, size`
``` js
{ _id: ObjectId("..."), item: "paper", qty: 100, tags: ["red", "blank", "plain"]}
```
2.4.4. Was fehlt um `_id` zu unterdrücken?
$`\Rightarrow`$ Suche wird auf `paper` Items eingeschränkt. Vom
Dokument werden nur bestimmte Attributwerte ausgegeben.
$`\Rightarrow`$ `_id:0`
3. Ergänzen Sie die Query von 2. um die `_id` zu unterdrücken?
``` js
db.products.find({"name":"Tshirt"} , {name:1, price:1, size:1, _id:0})
db.inventory.find({"item":"paper"} , {item:1, qty:1, tags:1, _id:0})
```
2.4.5: Was bewirkt `$elemMatch` in folgender Query?
4. Was bewirkt
[`$elemMatch`](https://docs.mongodb.com/manual/reference/operator/query/elemMatch/#op._S_elemMatch)
in folgender Query?
``` js
db.scores.find({ results: { $elemMatch: { $gte: 80, $lt: 85 } } })
db.inventory.find({ dim_cm: { $elemMatch: { $gte: 22, $lt: 25 } } })
```
$`\Rightarrow`$ `{ "_id" : 1, "results" : [ 82, 85, 88 ] }`
``` js
{ item: "planner", qty: 75, tags: ["blank", "red"], dim_cm: [ 22.85, 30 ] },
```
*It matches only those documents where the results array contains
***at least one element**\* that is both greater than or equal to 22
and is less than 25.\*
5. In einem Update soll die `qty` aller Dokumente der Collection
`inventory` mit `tags` `red` und qty \> 40 um 1 dekrementiert
werden.
<!--
Update Falle
Bei Update muss man `$set/$push/$inc` brauchen, um Änderungen an einem
bestehenden Dokument inkrementell durchzuführen.
Hinweis: `$elemMatch`: Siehe MongoDB-Doku.
Zusätzlich soll vermerkt werden, wer die Änderung gerade durchführt...
-->
``` js
db.inventory.update ( { tags: { $in: ["red"] }, qty: { $gt: 40 } },
{ $inc: { qty: -1 } } )
```
## Aufgaben 3: Neo4J - Prüfungsfragen
......@@ -416,13 +442,12 @@ Cypher Query Fragen:
└───────────┘
```
*Hinweis*
Warum wird *Dune* nicht aufgelistet?
- Warum wird *Dune* nicht aufgelistet: Bei der Patternerkennung
stellt Neo4j sicher, dass keine Übereinstimmungen enthalten
sind, bei denen die gleiche Diagrammbeziehung in einem einzigen
Pattern (`MATCH`) mehrfach vorkommt. In den meisten
Anwendungsfällen ist dies sinnvoll.
Bei der Patternerkennung stellt Neo4j sicher, dass keine
Übereinstimmungen enthalten sind, bei denen die gleiche
Diagrammbeziehung in einem einzigen Pattern (`MATCH`) mehrfach
vorkommt. In den meisten Anwendungsfällen ist dies sinnvoll.
- Erstellen Sie ein Query um eine Liste der Buchtitel mit deren
Authoren auszugeben.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment