【问题标题】:Why does my list of items sort incorrectly after many multiple updates?为什么我的项目列表在多次更新后排序不正确?
【发布时间】:2016-04-06 21:39:02
【问题描述】:

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

待办事项

待办事项 B

待办事项

待办事项

但是在一个接一个地调用多个更新之后:

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');
    })  
})

待办事项

待办事项

待办事项

待办事项 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")

【问题讨论】:

  • 请包含您用于渲染 todo 文档的助手。你在那个助手中应用排序吗?
  • @DavidWeldon 是的,我相信是的,我在上面添加了它
  • 这似乎非常接近我的问题stackoverflow.com/questions/28813567/…,但我不确定如何在帮助程序中实现 Tracker.autorun
  • createdAt 是怎么写的?会不会是不小心添加了修改createdAt的update hook?
  • 是的,所以因为创建日期都是一样的,所以它们将被任意排序。也许试试{sort: {createdAt: 1, message: 1}} 或其他东西。

标签: mongodb sorting meteor


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多