MongoDB tinder 的模式设计,如应用程序、嵌入式文档或单独的集合?

MongoDB schema design for tinder like application , Embedded document or a separate collection?

我有一个应用程序需要按以下方式工作:
- 当应用程序用户设置过滤器并且应用程序 returns 一组引号。
- 然后用户可以喜欢或不喜欢 "quote"

我们有大约 6 万条报价和大约相同数量的用户。 我对使用嵌入式数组存储喜欢和不喜欢的引号 ID 还是创建单独的集合然后进行查找感到困惑。 我知道 2and 选项将需要两个查询并且会变慢。

如果我使用嵌入式数组方法,在我开始见证性能下降之前我可以存储多少个引用 ID,因为 .

var UserSchema = mongoose.Schema({
                 fullName : {type: String,trim: true},
                 gender   : {type: String,enum: ['male', 'female']},
                 age      : {type: Number,required: true},
                 viewed   : []
});`

PS: 如果有更好的实现类似功能的方法,请在评论或解决方案中提及

编辑 1:
谢谢@niral patel 的提示。

基于我对 mongodb 所做的研究以及该问题的可能解决方案,我设计了一个测试,在该测试中我创建了一个大约 10K 个随机数数组,在现实世界中 come from another collection 并将其传递给带有 $nin 运算符的猫鼬查找查询 虽然我预计查询在较高负载下会很慢,但在我的测试中它非常快!
关于 195 requests per second 4 GB 双核盒子 运行 Ubuntu 16 http-proxy 后面有两个节点进程 运行。

我的最终查询看起来像这样

var userIDs = [];

 // filling userIDs with random numbers
for(var i=0;i<10000;i++){
    userIDs.push(Math.floor(Math.random() * (90000 - 50000)) + 50000);
}

users.find(user_id:{$nin:userIDs}}).limit(10).lean().exec(function(e,d){
    console.log(d); // results
});

根据来自 mongodb.com

的这篇信息丰富的文章

6 rules of thumb for MongoDB schema

如果您知道喜欢或不喜欢的报价数量不会增长超过几千。您可以在 UserSchema 中有一个引用 id 数组并使用 populate()。 这种方法还将提供更好的性能,因为您只需触发一个查询。我假设当您显示用户信息时,您还会显示 his/her 喜欢和不喜欢的引述。在那种情况下,这将是一个更好的方法。

如果您知道它会很大,您也可以有一个包含所有 ID 的单独集合。在这种情况下,您必须触发一个额外的查询。