[英]MongDB not storing newest document at end
我将我的网页评论保存到 MongoDB 中。 到目前为止,它工作得很好。 保存新评论时,会将其附加到集合的底部。 这意味着当其加载评论时,最新的评论位于提要的顶部,这是完美的。 直到我在最后添加了一条 124 个字符的评论,但现在所有评论都添加到倒数第二个 position 中。 现在看起来好像 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, "<").replace(/>/g, ">");
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 只会在文件遇到它们时以不确定的顺序返回文件。
碰巧有一段时间,您会看到在测试期间返回的文档意外排序,直到您插入与所有其他文档不同的文档。
如果您需要对 output 进行排序,则应在查询中使用sort()
参数。 否则文件将按不保证的顺序退回。
关于排序,您应该创建一个支持使用索引对查询结果进行排序中提到的排序的索引。 否则,MongoDB 中的内存排序限制为 32 MB 的 memory 使用量。 如果您的结果集 >32 MB,则查询将退出并出现异常。
我仍然不知道为什么它以错误的顺序存储文档,但我找到了一种方法来查找和排序我的查询,最终解决了问题。 这是我曾经这样做的代码:
Comment.find({}).sort({timePosted:1}).exec( (err, comments) => {
if (err) { throw err; }
res.json(comments);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.