Mongoose Aggregate: ограничить количество записей в $ group
1134 просмотра
1 ответ
Я пытаюсь преобразовать это предложение, используя метод Mongoose Aggregate:
«Для каждого игрока с данным oid выберите игру, в которую играли чаще всего». Вот моя игровая схема:
gameSchema = new mongoose.Schema({
game_name:{type:String},
game_id:{type:String},
oid:{type: String},
number_plays:{type:Number,default:0},
})
Game = mongoose.model('Game', gameSchema);
Вот код, который я использую:
var allids = ['xxxxx','yyyy'];
Game.aggregate([
{$match: {'oid': {$in:allids}}},
{$sort: {'number_plays': -1}},
{$group: {
_id: '$oid',
plays:{$push:"$number_plays"},
instructions:{$push:"$game_instructions"}
}}
], function(err,list){
console.log(list);
res.end();
});
Код выше возвращает следующее:
[ { _id: 'yyyy', plays: [ 10,4,5 ] },
{ _id: 'xxxxx',
plays: [ 28, 14, 10, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] } ]
Проблема в том, что он возвращает все игры, а не ту, в которую чаще всего играли. Итак, мой вопрос: возможно ли ограничить поля, заполненные в группе $?
Автор: Cyril Gaillard Источник Размещён: 13.11.2019 11:47Ответы (1)
2 плюса
Вы можете использовать $first
для получения значений из первого документа в каждой группе отсортированного конвейера:
var allids = ['xxxxx','yyyy'];
Game.aggregate([
{$match: {'oid': {$in:allids}}},
{$sort: {'number_plays': -1}},
{$group: {
_id: '$oid',
game_name: {$first: "$game_name"},
game_id: {$first: "$game_id"},
number_plays: {$first:"$number_plays"}
}}
], function(err,list){
console.log(list);
res.end();
});
Так как вы сортировали по number_plays
убыванию на предыдущем этапе конвейера, это будет принимать значения из документа каждой oid
группы с наибольшим number_plays
.
Вопросы из категории :
- node.js Удалить пустые элементы из массива в Javascript
- node.js Как мне избежать строки для команды оболочки в узле?
- node.js Могу ли я использовать jQuery с Node.js?
- node.js Как отлаживать приложения Node.js?
- node.js Как автоматически перезагрузить файлы в Node.js?
- mongodb Обновление вложенных документов в mongodb
- mongodb Когда использовать MongoDB или другие системы, ориентированные на документы?
- mongodb MongoDB: Как обновить несколько документов с помощью одной команды?
- mongodb MongoDB: Можно ли сделать запрос без учета регистра?
- mongodb Может ли MongoDB находиться в процессе?
- mongoose Как установить драйвер mongoose на nodejs?
- mongoose Mongoose Уникальный индекс не работает!
- mongoose Как разбить на страницы с помощью Mongoose в Node.js?
- mongoose Десятичное число / число с плавающей запятой в мангусте для node.js
- mongoose Как выполнить запрос массива идентификаторов в Mongoose?
- aggregation-framework Получить имена всех ключей в коллекции
- aggregation-framework MongoDB Regex Поиск по целочисленному значению
- aggregation-framework Обновить поле MongoDB, используя значение другого поля
- aggregation-framework Получить только запрошенный элемент в массиве объектов в коллекции MongoDB
- aggregation-framework MongoDB: Combine data from multiple collections into one..how?