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 }
});

以下是我如何将注释信息POST到DB的简化版本。

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"),
"upVotes" : 0,
"downVotes" : 0,
"comment" : "yes",
"username" : "mcChicken",
"timePosted" : ISODate("2019-11-06T20:55:41.927Z"),
"__v" : 0
}
/* 50 */
{
"_id" : ObjectId("5dc2e1dd7d13ba16effdeaa7"),
"upVotes" : 0,
"downVotes" : 0,
"comment" : "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"username" : "mcChicken",
"timePosted" : ISODate("2019-11-06T15:08:13.237Z"),
"__v" : 0
}

我试过在谷歌上搜索MongoDB保存文档的顺序,但没有成功。感谢您的任何意见,因为我完全不知道是什么导致了这种情况。

如果在不进行排序的情况下执行find()查询,则没有隐式排序。MongoDB只会以不确定的顺序返回遇到的文档。

只是有一段时间,你会看到在测试过程中意外排序返回的文档,直到你插入了一个与其他文档不同的文档。

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

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

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

Comment.find({}).sort({timePosted:1}).exec( (err, comments) => {
if (err) { throw err; }
res.json(comments);
});

最新更新