我有两个集合:用户和推文。模式就像这些(我删除了不重要的字段,因为它们很多):
UsersSchema = {
_id:Number,
followers_count:Number
};
TweetsSchema = {
_id:Number,
is_retweet:Boolean,
user:{type:Number, ref:"Users"}
}
当我查询推文时,我通常会创建一个populate("user")
,所以我知道发推文的用户是谁。到现在为止还挺好。但是现在,我需要检索所有推文(is_retweet)的推文的关注者数量(followers_count)。我尝试过聚合,但我不能使用Tweets架构中创建的参数(followers_count)来计算总和。
我在Mongo没有太多经验:(我已经搜索了一段时间的答案......有什么方法可以解决这个问题,或者我必须首先查询所有用户ID出现在带有is_retweet的推文中,然后是另一个返回该数组id的followers_count的查询?
答案 0 :(得分:0)
MongoDB不进行连接。如果您需要两个集合中提供的信息,则至少需要两个查询。
具体取决于您的"典型"查询是,您应该考虑将部分或全部用户信息非规范化为推文。
您的查询也存在语义问题。您想要哪些粉丝数?他们推文时高音扬声器的粉丝数量?他们在提取用户文档时的追随者?对于转推,了解最终转发的推文时有多少粉丝可能更为相关。你可以想象一个社交媒体人物,从8个粉丝开始,推特140个字符的结晶光彩,以及通过两个月后拥有1500万粉丝的转推获得的人气。