MongoDB-like(upvote)和Loke(downvote)模式设计

MongoDB-like(upvote)和Loke(downvote)模式设计,mongodb,mongoose,mongoose-schema,Mongodb,Mongoose,Mongoose Schema,我很惊讶,然后我看到了下面的代码: { "_id": ObjectId("53f51a844ffa9b02cf01c074"), "upvoted": [], "downvoted": [], "upvoteCount": 0, "downvoteCount": 0 } 在没有计票的情况下,我有一个类似的模式。就像你在下面看到的 { "_id": ObjectId("53f51a844ffa9b02cf01c074"), "upvoted

我很惊讶,然后我看到了下面的代码:

{
    "_id": ObjectId("53f51a844ffa9b02cf01c074"),
    "upvoted": [],
    "downvoted": [],
    "upvoteCount": 0,
    "downvoteCount": 0
}
在没有计票的情况下,我有一个类似的模式。就像你在下面看到的

{
    "_id": ObjectId("53f51a844ffa9b02cf01c074"),
    "upvoted": [],
    "downvoted": [],
}

拥有计数字段的优势是什么?为什么不在你需要计票的时候呢?它是否有助于提高性能(当您只想查询voteCount时)?

您实际上不需要count字段。我相信在查询数百万文档集合时,它将节省几毫秒的时间。只有测试才能确定。另外,如果您正在寻找一个可以处理upvote/downvote逻辑的更新查询,那么请看一看:不需要将计数数存储在单独的字段中。与简单地使用
$size
运算符相比,保持此字段的最新性和一致性需要付出更多的努力。我相信在查询数百万文档集合时,它将节省几毫秒的时间。只有测试才能确定。另外,如果您正在寻找一个可以处理upvote/downvote逻辑的更新查询,那么请看一看:不需要将计数数存储在单独的字段中。与简单地使用
$size
操作符相比,保持此操作的最新性和一致性需要付出更多的努力。