多次更新后,为什么我的项目列表排序不正确?

时间:2016-01-02 22:37:15

标签: mongodb sorting meteor

我正在使用Meteor,我有一个项目列表,如:

Todo A

Todo B

Todo C

Todo D

然后一个接一个地调用多个更新之后:

Todos.find().forEach(function(todo) {
    Todos.update(todo._id, {$set: {  
                strength:s,
                retention:r,    
                }}, 
        function(err, res){
            if(err){throw err}
            console.log('updated '+res+' doc');
    })  
})

Todo A

Todo D

Todo C

Todo B

列表顺序搞砸了。如果我刷新它再次罚款并相应地排序。为什么会这样?

Template.listsShow.helpers({
    editing: function() {
        return Session.get(EDITING_KEY);
    },

    todosReady: function() {
        return Router.current().todosHandle.ready();
    },

    todos: function(listId) {
        var obj =  Todos.find({listId: listId}, {sort: {createdAt : 1}});
        return obj;
    }
});

//Server Side 
Meteor.publish('todos', function(listId) {
    check(listId, String);
    return Todos.find({listId: listId});
});





{
    "_id" : "6pELT5pmGoXQhh2eG",
    "createdAt" : ISODate("2016-01-02T23:58:12.236Z")
}
{
    "_id" : "4ES3hbJX76nLCJGGL",
    "createdAt" : ISODate("2016-01-02T23:58:12.236Z")
}
{
    "_id" : "NzModCoCHcbWdWo22",
    "createdAt" : ISODate("2016-01-02T23:58:12.236Z")
}
{
    "_id" : "tzgK3EdMrBi8SbGBn",
    "createdAt" : ISODate("2016-01-02T23:58:12.236Z")

1 个答案:

答案 0 :(得分:2)

根据我们上面的对话,看起来问题与几个文档对createdAt具有相同值的事实有关。因此,仅对该字段进行排序将导致任意排序。如果文档是从脚本生成的,您可以尝试随机化日期。此外,您可以对多个字段进行排序,例如:{sort: {createdAt: 1, message: 1}}