Я разматываю массив, используя структуру агрегации MongoDB, и массив имеет дубликаты, и мне нужно игнорировать эти дубликаты при дальнейшем группировании.MongoDB - размотать массив, используя агрегацию и удалить дубликаты
Как я могу это достичь?
Я разматываю массив, используя структуру агрегации MongoDB, и массив имеет дубликаты, и мне нужно игнорировать эти дубликаты при дальнейшем группировании.MongoDB - размотать массив, используя агрегацию и удалить дубликаты
Как я могу это достичь?
вы можете использовать $addToSet сделать это:
db.users.aggregate([
{ $unwind: '$data' },
{ $group: { _id: '$_id', data: { $addToSet: '$data' } } }
]);
Это трудно дать вам более конкретный ответ, не видя ваш фактический запрос.
я подумал о том, что , Я могу расслабиться, добавить и снова расслабиться. Но хотелось посмотреть, могу ли я по-другому. Благодарю. –
вы можете просто группировать по элементу id и массиву (без добавления в набор), не могу сказать больше без вашего запроса –
Вы должны использовать $ addToSet, но сначала вам нужно сгруппировать по _id, потому что, если вы этого не сделаете, вы получите элемент за элемент в списке.
Представьте себе сообщение коллекции с документами, как это:
{
body: "Lorem Ipsum...",
tags: ["stuff", "lorem", "lorem"],
author: "Enrique Coslado"
}
Представьте, что вы хотите, чтобы вычислить самый обычный тег для каждого автора. Вы бы сделать агрегатный запрос вроде этого:
db.posts.aggregate([
{$project: {
author: "$author",
tags: "$tags",
post_id: "$_id"
}},
{$unwind: "$tags"},
{$group: {
_id: "$post_id",
author: {$first: "$author"},
tags: {$addToSet: "$tags"}
}},
{$unwind: "$tags"},
{$group: {
_id: {
author: "$author",
tags: "$tags"
},
count: {$sum: 1}
}}
])
Таким образом, вы получите документы, как это:
{
_id: {
author: "Enrique Coslado",
tags: "lorem"
},
count: 1
}
Отличный ответ, я бы просто добавил '{$ sort: {count: -1}}' как последний этап трубопровода для сортировки. – Diego
HI andrewrk Пожалуйста, вы можете поделиться схемы для выше вопрос и ответ –