Mongodb 为什么我的项目列表在多次更新后排序不正确?
我正在使用Meteor,我有一个项目列表,如: 待办事项 待办事项B 待办事项C 待办事项 但是在一个接一个地调用多个更新之后:Mongodb 为什么我的项目列表在多次更新后排序不正确?,mongodb,sorting,meteor,Mongodb,Sorting,Meteor,我正在使用Meteor,我有一个项目列表,如: 待办事项 待办事项B 待办事项C 待办事项 但是在一个接一个地调用多个更新之后: Todos.find().forEach(function(todo) { Todos.update(todo._id, {$set: { strength:s, retention:r, }}, function(err, res){
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');
})
})
待办事项
待办事项
待办事项C
待办事项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")
根据我们上面的对话,问题似乎与以下事实有关:
createdAt
的几个文档具有相同的值。因此,仅在该字段上排序将导致任意排序。如果文档是从脚本生成的,您可以尝试将日期随机化。此外,您可以对多个字段进行排序,例如:{sort:{createdAt:1,message:1}
请包含用于呈现todo文档的帮助程序。你在那个助手中应用了排序吗?@DavidWeldon是的,我想是的,我在上面添加了它。这似乎很接近我的问题,但我不确定如何在助手中实现Tracker.autorun如何编写createdAt
?可能是您意外地添加了一个更新钩子,它修改了createdAt
?是的,因为创建日期都是相同的,所以它们将被仲裁排序。也许可以尝试{sort:{createdAt:1,message:1}
或其他方法。