【问题标题】:Stop automatic reordering of documents in mongo db停止 mongo db 中文档的自动重新排序
【发布时间】:2015-02-24 03:46:55
【问题描述】:

当我将任何子文档添加到现有文档时,文档会在 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>

当评论添加到任何帖子时,我将评论保存在数据库中,然后再次带回所有帖子并将其分配给 $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="";


};

【问题讨论】:

  • 发布一些代码。你做了什么“改变”导致重新订购?

标签: angularjs mongodb mongoose


【解决方案1】:

这取决于该集合的磁盘存储分配。如果 Mongo 可以在分配的空间中使用新文档,它将尝试用新文档替换旧文档,但如果不能,它将使旧文档过期并将更新的文档保存到磁盘上集合的末尾。

当你在一个集合上调用 find() 时,它会从磁盘存储的开始一直工作到结束,因为这是最有效的。如果您随后修改了任何文档,则无法保证这与插入顺序相同。

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

【讨论】:

  • 为所有 find() 查询添加了按 _id 排序,并且工作正常。谢谢。
猜你喜欢
  • 2020-10-17
  • 1970-01-01
  • 2011-04-04
  • 1970-01-01
  • 1970-01-01
  • 2018-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多