2015-04-15 1 views
0

Я хочу создать список recentlyVisited, который является списком, ограниченным тремя элементами. Результаты, более ранние, чем первые три, будут «оттолкнуты» от края списка (и совершенно неактуальны, поэтому их можно удалить).Создайте список, который может содержать только х элементов в mongodb

Для исходного типа данных, скажем, у меня есть что-то вроде этого.

{ 
    "username": "corvid", 
    "recentlyVisited": ['1234', '5678', '1470'] 
} 

Затем, представив этот вопрос, я мог бы сделать что-то вроде следующего

Template.question.onCreated(function() { 
    var questionId = Router.current().params._id; 
    Meteor.users.update(Meteor.userId(), { 
    $push: { "recentlyVisited": questionId } 
    }); 
}); 

Я мог бы опубликовать его, как это, но он по-прежнему не решает основной проблемы.

Meteor.publish('currentUser', function() { 
    if(this.userId) { 
    return Meteor.users.find(
     { _id: this.userId }, 
     { limit: { recentlyVisited: 3 } } 
    ); 
    } 
}); 

Можно ли $push но ограничить число, которое может быть сохранено в наборе?

ответ

1

Можно ли $ толкать, но ограничить число, которое может поддерживаться в множество? ДА

Используйте $slice для этого.

Модификатор $ slice ограничивает количество элементов массива во время операции $ push .

Это другая цитата АМСВА из http://docs.mongodb.org/manual/reference/operator/projection/slice/

Для получения информации об ограничении размера массива во время обновления с $ толчка см модификатора $ ломтика вместо

Так просто изменить код немного бит, как это.

Template.question.onCreated(function() { 
    var questionId = Router.current().params._id; 
    Meteor.users.update(Meteor.userId(),{$push:{ 
    recentlyVisited:{ 
    $each:[questionId ], 
    $slice:3 
    } 
}}); 
}); 
+0

отличный ответ, спасибо за помощь – corvid