У меня есть коллекция с схемой:MongoDB запроса - Выберите один из каждых из не уникального массива
{
_id: 521cc63c19752c562300001a,
author: 'John',
quote: 'A quote',
type: 1,
stars:
[{ _id: 521cc63c19752c562300001b,
user: 521cc63c19752c5623000003,
date: Tue Aug 27 2013 16:31:08 GMT+0100 (IST) }]
}
Я пытаюсь выбрать документы, которые имеют типов внутри конкретный массив. Например, если типы являются уникальными, она возвращает три цитаты из каждого типа, точно по назначению:
db.quotes.aggregate([
{$match: {
"type": {
$in: [1, 2, 3] //The unique types
}
}},
// Group by the type
{$group: {
_id: "$type",
id: { $first: "$_id" },
author: { $first: "$author" },
stars: { $first: "$stars" },
description: { $first: "$description" }
}},
// Map/project the first result of each group
// to their respective keys
{$project: {
_id: "$id",
type: "$_id",
author: "$author",
description: "$description"
stars: "$stars"
}}
]);
Моя проблема заключается в том, что типы не могут быть всегда быть уникальным. Я мог бы найти три документа одного типа ([1, 1, 1]) или два одинаковых и один уникальный ([1, 2, 2]). Когда эта ситуация возникает, она возвращает только один или два результата из-за команды $ group by type. Любые советы, как я могу предоставить три уникальных типа и всегда получать три кавычки для каждого типа?
Либо вы должны удалить '$ groupby' шага от вашего запроса, или я не понял вас правильно. – Shad
@Shad Затем он возвращает все документы, которые имеют этот тип, а не только один из них. Я вижу, как я это подразумевал, я отредактирую свой вопрос. Благодарю. – AdrianCooney