MongDB末尾未存储最新文档

我将网页注释保存到MongoDB中。到现在为止,它一直运行良好。保存新注释后,它将其添加到集合的底部。这意味着当其加载注释为最新时,它位于供稿的顶部,这是完美的。直到我添加了一个带有124个字符的注释,该注释被添加到末尾,但是现在所有发布的注释都添加到了倒数第二个位置。现在,看起来好像124个字符的注释位于顶部。 124个字符以下的所有注释均不会引起任何问题。唯一的解决方法是删除有问题的注释。发布后的日期都是正确的。

下面概述了我的架构,我不认为这是问题所在。

    var commentSchema = new Schema({
        username: { type: String },comment: { type: String },timePosted: { type: Date,dafault: new Date() },upVotes: { type: Number,default: 0 },downVotes: { type: Number,default: 0 }
    });

这是我将评论信息发布到数据库的简化版本。

router.post('/addComment',function(req,res,next) {
    comment = new Comment(req.body);
    comment.comment = comment.comment.replace(/</g,"&lt;").replace(/>/g,"&gt;");
    comment.save(function(err,savedComment) {
        if (err) { throw err; }
        res.json(savedComment);
    });
});

这是收藏集中的最后3个条目。

/* 48 */
{
    "_id" : ObjectId("5dc33349673dc30ed49d53dc"),"upVotes" : 0,"downVotes" : 0,"comment" : "unce unce unce","username" : "mcChicken","timePosted" : ISODate("2019-11-06T20:55:37.955Z"),"__v" : 0
}

/* 49 */
{
    "_id" : ObjectId("5dc3334d673dc30ed49d53dd"),"comment" : "yes","timePosted" : ISODate("2019-11-06T20:55:41.927Z"),"__v" : 0
}

/* 50 */
{
    "_id" : ObjectId("5dc2e1dd7d13ba16effdeaa7"),"comment" : "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","timePosted" : ISODate("2019-11-06T15:08:13.237Z"),"__v" : 0
}

我尝试用什么顺序查询MongoDB将文档保存到哪个顺序失败。感谢所有输入,因为我完全不知道是什么原因造成的。

qinhao8438 回答:MongDB末尾未存储最新文档

如果您执行find()查询而不进行排序,则没有隐式排序。 MongoDB会以不确定的顺序返回返回的文档。

碰巧的是,有一段时间,您看到测试期间意外归还的文档归类,直到您插入与所有其他文档都不相同的文档为止。

如果需要对输出进行排序,则应在查询中使用sort()参数。否则,文档将无法保证顺序退回。

关于排序,您应该创建一个支持Use Indexes to Sort Query Results中提到的排序的索引。否则,MongoDB中的内存中排序限制为32 MB的内存使用量。如果您的结果集> 32 MB,查询将异常退出。

,

我仍然不知道为什么它以错误的顺序存储文档,但是我找到了一种查找和排序查询的方法,最终解决了问题。这是我以前执行此操作的代码:

    Comment.find({}).sort({timePosted:1}).exec( (err,comments) => {
        if (err) { throw err; }
        res.json(comments);
    });
本文链接:https://www.f2er.com/3148931.html

大家都在问