MongoDB: Jak pobrać rekordy z tablicy obiektów?
Opublikowano: 19.07.2022 - tagi: MongoDB Baza danych Zapytanie Szukanie Rekord Tablica Obiekt
Mamy taką kolekcję:
[
{
title: "Product 1",
tags: [
{ name: "Tag 1", value: "tag1" }
]
},
{
title: "Product 2",
tags: [
{ name: "Tag 2", value: "tag2" },
{ name: "Tag 4", value: "tag4" }
]
},
{
title: "Product 3",
tags: [
{ name: "Tag 1", value: "tag1" },
{ name: "Tag 3", value: "tag3" }
]
},
{
title: "Product 4",
tags: [
{ name: "Tag 1", value: "tag1" },
{ name: "Tag 3", value: "tag3" },
{ name: "Tag 4", value: "tag4" }
]
},
]
I chcielibyśmy pobrać rekordy na podstawie wartości z tablicy tags. Konkretnie to dla pola: tags.value.
Można to zrobić tak:
db.collection.find({"tags.value": "tag1"})
Takie zapytanie pobierze trzy rekordy.
Na podstawie powyższego zapytania możemy pobrać kilka rekordów na podstawie jednej wartości. Jeśli chcemy pobrać dane dla kilku wartości, możemy skorzystać operatora: $in:
db.collection.find({"tags.value": { $in: ["tag1", "tag3"] } })
Zauważ, że to zapytanie pobierze dane, które mają przynajmniej jedną wartość w podanej tablicy.
Jeśli zależy nam na spełnieniu wszystkich warunków, powinniśmy skorzystać z operatora: $all:
db.collection.find({"tags.value": { $all: ["tag1", "tag3"] } })
Pobierze dwa rekordy, które zawierają zarówno tag1 i tag2.