Comics: What color is it?

Opublikowano: - tagi:

MongoDB: Jak dodać do tablicy element bez duplikatu?

Opublikowano: - tagi:

Operator $push pozwala na dodanie do tablicy daną wartość:

Kolekcja:

{
	_id: 1,
	tags: ['foo', 'bar']
}

Zapytanie:

db.collection.updateOne({ _id: 1}, { $push: { tags: 'bar' } });

Do tablicy tags doda nowy element: bar:

{
	_id: 1,
	tags: ['foo', 'bar', 'bar']
}

Mamy dwa elementy o takiej samej wartości: bar. Co jeśli chcemy dodać nowy element, pod warunkiem że nie istnieje on już w tablicy?

Unikanie duplikatów

Okazuje się, że ten problem można łatwo rozwiązać za pomocą operatora: $addToSet:

db.collection.updateOne({ _id: 1}, { $addToSet: { tags: 'bar' } });

Ponieważ bar już istnieje tablicy tags to nie zostanie on dodany do tablicy.


Jak skończyć własny projekt?

Opublikowano: - tagi:

Każdy, kto choć raz zaczął, tworzyć własny projekt wie, że łatwiej zacząć niż go skończyć.

Zdecydowanie jest więcej nieskończonych projektów niż tych zrealizowanych.

Poniżej w punktach przedstawiam, co może pomóc w ukończeniu projektu.

Określ minimalne wymagania

Z grubsza wiesz, co chcesz stworzyć. Zaczynasz pracę nad aplikacją i w pewnym momencie zauważasz, że ciągle coś do niej dodajesz. Bo wpadłeś na nowy fajny pomysł. Problem jest taki, że dodatkowe rzeczy zajmują więcej czasu. Z czasem przychodzi znużenie projektem i zaczynają się pierwsze kroki do porzucenia projektu.

Istnieje takie pojęcie jak: Minimum Viable Product (MVP). W skrócie chodzi o to, że określasz minimalne wymagania dla swojej aplikacji po implementacji, których możesz powiedzieć, że pierwsza wersja jest skończona. Minimalne, czyli wystarczające do swobodnego korzystania z programu.

Kiedy wypuścisz pierwszą wersję projektu, będziesz mieć czas na przemyślenie istniejących funkcjonalności lub dodanie nowych.

Twoim celem jest stworzenie pierwszej wersji programu.

Planuj

Drugim krokiem jest planowanie. To też jest istotne. Masz już wymagania? Teraz rozplanuj, co ma się znaleźć, w aplikacji. Co ma się tam znaleźć?

Na podstawie gotowych wymagań możesz rozplanować poszczególne etapy prac nad aplikacją. Nie muszisz planować wszystkich szczegółów. Chodzi o to, żeby rozrysować ogólny obraz pracy nad projektem.

Stwórz mapę drogową swojego projektu. Działając w taki sposób, można też śledzić postępy.

Regularność

Masz określone wymagania i zaplanowałeś kolejne kroki. Czas zabrać się do pracy.

Na początku zaczniesz z werwą. Ale nie ma, co się oszukiwać motywacja w końcu spadnie. Powinieneś postawić na dyscyplinę.

Konkretnie to powinieneś stworzyć nawyk pracy nad projektem. Pytanie ile masz czasu? Wystarczy nawet 15 minut dziennie, żeby zacząć rozwijać swój projekt. Określ: jak często zamierzasz pracować w tygodniu i ile czasu chcesz na to poświecić.

Oczywiście im więcej czasu na niego poświęcisz, tym szybciej go skończysz. Z drugiej strony nie ma co się zmuszać


MongoDB: Jak pobrać rekordy z tablicy obiektów?

Opublikowano: - tagi:

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.


MongoDB: Jak pobrać rekordy na podstawie ciągu znaków?

Opublikowano: - tagi:

Mamy taką strukturę kolekcji z danymi:

[
	{ title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit", amount: 10 },
	{ title: "Nunc fringilla posuere mi, lacinia vulputate magna lobortis nec", amount: 7 },
	{ title: "Etiam lacinia urna id felis vulputate ullamcorper", amount: 32 },
	{ title: "Aenean euismod sed lorem quis tempor.", amount: 50 }
]

I chcemy pobrać rekordy z kolekcji na podstawie jakiegoś fragmentu tekstu. Na przykład lorem:

db.collection.find({ title: /lorem/i })

W tym zapytaniu wykorzystujemy tutaj wyrażenie regularne. Dla tego zapytania pobierze dwa rekordy:

[
	{ title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit", amount: 10 },
	{ title: "Aenean euismod sed lorem quis tempor.", amount: 50 }
]

Zauważ, że wykorzystujemy tutaj także flagę i ponieważ nie chcemy brać pod uwagę wielkości liter.