数据模型设计,Mongodb中的相关集合

时间:2016-02-24 00:22:16

标签: node.js mongodb mongoose

我收集了一系列“问题”。此外,我在User.answered数组集合中保存已经回答的问题ID的历史记录。然后我通过查询匹配并列出未回答的问题     findone({id {$ nin:User.answered}})

它工作并且池对象不在应答数组中。但我认为这是不正确的,特别是当历史变得越来越大,我必须将300个ids数组传递给find()。

是否有过度杀伤过程? 还有其他选择吗?

感谢您的建议。

1 个答案:

答案 0 :(得分:0)

从长远来看,我确实相信此类查询会降低您的系统速度。

在mongodb中,强烈建议自己存储计算值。每次回答问题时,您都可以将问题ID $push user.answered $inc:1 user.answeredCounter}。

现在,您可以简单地通过questions.count()来获取问题数量,然后用user.answeredCounter来进行减法来获得未回答的问题数量。

或者,如果问题的数量没有经常变化,则可以考虑将未回答的问题本身的数量存储到用户文档中。 (每次添加新问题时,将所有用户文档unansweredCounter都更新1。

现在这可能不太可取,因为对于每个新问题,您都必须更新所有用户文档。而更新answredCounter的频率要少得多(一旦一个用户回答了一个问题,就更新一个用户)。