Mam dwie kolekcje. Pierwszy zbiór zawiera studentów:MongoDB: Jak sprawdzić, czy pole tablicy zawiera element?
{ "_id" : ObjectId("51780f796ec4051a536015cf"), "name" : "John" }
{ "_id" : ObjectId("51780f796ec4051a536015d0"), "name" : "Sam" }
{ "_id" : ObjectId("51780f796ec4051a536015d1"), "name" : "Chris" }
{ "_id" : ObjectId("51780f796ec4051a536015d2"), "name" : "Joe" }
Drugi zbiór zawiera kursy:
{
"_id" : ObjectId("51780fb5c9c41825e3e21fc4"),
"name" : "CS 101",
"students" : [
ObjectId("51780f796ec4051a536015cf"),
ObjectId("51780f796ec4051a536015d0"),
ObjectId("51780f796ec4051a536015d2")
]
}
{
"_id" : ObjectId("51780fb5c9c41825e3e21fc5"),
"name" : "Literature",
"students" : [
ObjectId("51780f796ec4051a536015d0"),
ObjectId("51780f796ec4051a536015d0"),
ObjectId("51780f796ec4051a536015d2")
]
}
{
"_id" : ObjectId("51780fb5c9c41825e3e21fc6"),
"name" : "Physics",
"students" : [
ObjectId("51780f796ec4051a536015cf"),
ObjectId("51780f796ec4051a536015d0")
]
}
Każdy dokument Kurs zawiera students
tablicę, która ma listę studentów zarejestrowanych na kurs. Kiedy uczeń przegląda kurs na stronie internetowej, musi sprawdzić, czy już zapisał się na kurs, czy nie. W tym celu, gdy kolekcja courses
zostanie przeszukiwana w imieniu ucznia, musimy sprawdzić, czy tablica students
zawiera już ObjectId ucznia. Czy istnieje sposób, aby określić w projekcji zapytania wyszukiwania, aby pobrać studenta ObjectId
z tablicy students
tylko wtedy, gdy istnieje?
Próbowałem sprawdzić, czy mogę mieć operatora $ elemMatch, ale jest on nastawiony na szereg pod-dokumentów. Rozumiem, że mogłem użyć struktury agregacji, ale wydaje się, że w tym przypadku będzie to przesadą. Struktura agregacji prawdopodobnie nie byłaby tak szybka jak pojedyncze zapytanie wyszukiwania. Czy istnieje sposób na zapytanie o zbieranie kursów, aby zwracany dokument mógł mieć formę podobną do tej?
{
"_id" : ObjectId("51780fb5c9c41825e3e21fc4"),
"name" : "CS 101",
"students" : [
ObjectId("51780f796ec4051a536015d0"),
]
}
Dziękuję za potwierdzenie moich przemyśleń na temat braku możliwości wysyłania zapytań do prostych tablic oraz tablic pod-dokumentów. Sądzę, że będę musiał ponownie ocenić mój schemat. Czy wiesz, czy 10Gen zamierza rozwiązać ten problem? – shargors
Nie mogłem znaleźć biletu Jira na to na jira.mongodb.org i nic nie jest zaplanowane na wydanie bez biletu tam, więc powiedziałbym na pewno nie w najbliższym czasie. –
A co z użyciem $ all, jak opisano w http://stackoverflow.com/questions/8145523/mongodb-find-by-multiple-array-items – Xerri