Chciałbym zdefiniować etap agregacji $ projektu, w którym mogę poinstruować go, aby dodał nowe pole i uwzględnił wszystkie istniejące pola, bez konieczności wyszczególniania wszystkich istniejących pól.
Mój dokument wygląda tak, z wieloma polami:
{
obj: {
obj_field1: "hi",
obj_field2: "hi2"
},
field1: "a",
field2: "b",
...
field26: "z"
}
Chcę wykonać taką operację agregacji:
[
{
$project: {
custom_field: "$obj.obj_field1",
//the next part is that I don't want to do
field1: 1,
field2: 1,
...
field26: 1
}
},
... //group, match, and whatever...
]
Czy jest coś takiego jak słowo kluczowe „uwzględnij wszystkie pola”, którego mogę użyć w tym przypadku, lub inny sposób, aby uniknąć konieczności wyszczególniania każdego pola osobno?
mongodb
mongodb-query
aggregation-framework
samuelluis
źródło
źródło
Odpowiedzi:
W 4.2+ możesz użyć
$set
operatora potoku agregacji, który jest niczym innym jak aliasem$addFields
dodanym w 3.4źródło
$addFields
jest nowy w MongoDB 3.4, który jest obsługiwany przez sterownik C # w wersjiIAggregateFluent<TResult>.AppendStage(new JsonPipelineStageDefinition<TInput, TOutput>("{ $addFields : { myField: 'myValue' }}")
Możesz użyć $$ ROOT, aby odwołać się do dokumentu głównego. Zachowaj wszystkie pola tego dokumentu w polu i spróbuj go później uzyskać (w zależności od systemu klienta: Java, C ++, ...)
źródło
document
opcją utworzenia jednego scalonego dokumentu, byłby ładniejszy ...custom_field
dołączonym.const newObj = { ...result.document, custom_field: result.custom_field }
>>> Jest coś takiego jak słowo kluczowe „uwzględnij wszystkie pola”, którego mogę użyć w tym przypadku lub jakieś inne rozwiązanie?
Niestety, nie istnieje operator „uwzględniania wszystkich pól” w operacji agregacji. Jedyny powód, dlaczego, ponieważ agregacja jest głównie tworzona w celu grupowania / obliczania danych z pól kolekcji (suma, średnia itp.) I zwracania wszystkich pól kolekcji, nie jest bezpośrednim celem.
źródło
posts
z _id, title, body, polubień. Pole polubień to tablica identyfikatorów użytkowników, którym podobał się post. Jak możesz wyświetlić listę wszystkich postów ze wszystkimi _id, title, body, likeCount? Zwrócenie wszystkich pól jest w tym przypadku bezpośrednim celem.Od wersji 2.6.4 Mongo DB nie ma takiej funkcji dla
$project
potoku agregacji. Z dokumentów dla$project
:i
źródło
Aby dodać nowe pola do dokumentu, możesz użyć
$addFields
z dokumentów
i do wszystkich pól w dokumencie, których możesz użyć
$$ROOT
źródło
zgodnie z odpowiedzią @Deka, dla sterownika c # mongodb 2.5 można uzyskać zgrupowany dokument ze wszystkimi kluczami jak poniżej;
źródło