我收集了一系列“问题”。此外,我在User.answered数组集合中保存已经回答的问题ID的历史记录。然后我通过查询匹配并列出未回答的问题 findone({id {$ nin:User.answered}})
它工作并且池对象不在应答数组中。但我认为这是不正确的,特别是当历史变得越来越大,我必须将300个ids数组传递给find()。
是否有过度杀伤过程? 还有其他选择吗?
感谢您的建议。
答案 0 :(得分:0)
从长远来看,我确实相信此类查询会降低您的系统速度。
在mongodb中,强烈建议自己存储计算值。每次回答问题时,您都可以将问题ID $push
user.answered
$inc:1
user.answeredCounter
}。
现在,您可以简单地通过questions.count()
来获取问题数量,然后用user.answeredCounter
来进行减法来获得未回答的问题数量。
或者,如果问题的数量没有经常变化,则可以考虑将未回答的问题本身的数量存储到用户文档中。 (每次添加新问题时,将所有用户文档unansweredCounter
都更新1。
现在这可能不太可取,因为对于每个新问题,您都必须更新所有用户文档。而更新answredCounter
的频率要少得多(一旦一个用户回答了一个问题,就更新一个用户)。