停止在mongo db中自动重新排序文档

时间:2014-06-25 19:36:33

标签: angularjs mongodb mongoose

当我将任何子文档添加到现有文档时,文档将重新排列在 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="";


};

1 个答案:

答案 0 :(得分:1)

它归结为该集合的磁盘存储分配。如果旧文档可以在分配的空间中执行,Mongo将尝试将旧文档替换为新文档,但如果它不能,它将使旧文档到期并将更新的文档保存到集合的末尾在磁盘上。

当您在集合上调用find()时,它将从磁盘存储的开头到结尾工作,因为这是最有效的。如果您随后修改了任何文件,则无法保证这与插入订单相同。

如果要获得一致的输出,请在从集合中提取时按某些键(如createdTimestamp)进行排序。您可能还应该在此字段上添加索引。