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.