当我将任何子文档添加到现有文档时,文档将重新排列在 mongo db 中。
查询结果被分配给angularjs代码中的模型。这会导致视图中数据的顺序发生变化。
如何停止自动重新排列文档?
我可以看到这些文件在 Robomongo 中重新排列,我做任何更改。 所以我可以肯定地说,对象在更新后会在磁盘中重新排列。
我做错了什么或文件是否自动重新排列。
代码:
此处allusersposts来自控制器页面加载时。
var basePost1 = Restangular.all('posts');
basePost1.getList().then(function(allusersposts) {
$scope.allusersposts = allusersposts;
});
标记:
<div class="list-group" data-ng-repeat="usersposts in allusersposts" >
<h4>{{usersposts.description}}</h4>
<!-- ng repeat for comments on each post -->
<div class="list-group" data-ng-repeat="eachcomment in usersposts.comments ">
<label>{{eachcomment.description}}</label>
</div>
<!--input comment -->
<textarea rows="3" data-ng-model='comment'></textarea>
<button data-ng-click="saveComment(usersposts,comment)" >comment</button>
</div>
当评论被添加到任何帖子然后我将评论保存在db中,然后再次带回所有帖子并将其分配给$ scope.allusersposts。导致查看帖子顺序与以前不同。添加评论的帖子移动到列表中的其他位置。
$scope.saveComment=function(usersposts,comment){
var post_id=usersposts._id;
var basePost = Restangular.one('getSinglepost', post_id);
basePost.get().then(function(receiveSinglePost) {
var basePost = Restangular.one('getSinglepost', post_id);
var makePutdata={
'description':comment,
'user_id':$stateParams._id
}
basePost.put(makePutdata).then(function(allPosts) {
$scope.allusersposts=allPosts;
});
});
$scope.comment="";
};
答案 0 :(得分:1)
它归结为该集合的磁盘存储分配。如果旧文档可以在分配的空间中执行,Mongo将尝试将旧文档替换为新文档,但如果它不能,它将使旧文档到期并将更新的文档保存到集合的末尾在磁盘上。
当您在集合上调用find()时,它将从磁盘存储的开头到结尾工作,因为这是最有效的。如果您随后修改了任何文件,则无法保证这与插入订单相同。
如果要获得一致的输出,请在从集合中提取时按某些键(如createdTimestamp)进行排序。您可能还应该在此字段上添加索引。