【问题标题】:In MongoDB with Mongoose (NodeJS) how can I query(find) over a populated field?在带有 Mongoose(NodeJS)的 MongoDB 中,我如何查询(查找)填充的字段?
【发布时间】:2014-08-26 23:03:00
【问题描述】:

我有两个集合:用户和推文。架构是这样的(我删除了不重要的字段,因为它们很多):

UsersSchema = {
    _id:Number,
    followers_count:Number
};
TweetsSchema = {
    _id:Number,
    is_retweet:Boolean,
    user:{type:Number, ref:"Users"}
}

当我查询推文时,我通常会创建一个populate("user"),这样我就知道是谁发了推文。到目前为止,一切都很好。但是现在,我需要检索所有转发推文 (is_retweet) 的关注者数量 (followers_count)。我已经尝试过聚合,但我不能使用尚未在推文模式中创建的参数 (followers_count) 来求和。

我在 Mongo 方面没有太多经验 :( 我已经搜索了一段时间来寻找答案...有没有办法解决这个查询,或者我必须首先查询出现的所有用户 ID在带有 is_retweet 的推文中,然后是另一个返回该 id 数组的 follower_count 的查询?

【问题讨论】:

  • 你需要为用户模型检索这些数据,对吧?
  • 是的,通过推文查询时来自用户模型的数据。

标签: node.js mongodb mongoose


【解决方案1】:

MongoDB 不进行连接。如果您需要两个集合中的可用信息,则至少需要两个查询。

根据您的“典型”查询到底是什么,您应该考虑将部分或全部用户信息非规范化到推文中。

您的查询也存在语义问题。您想要哪些关注者人数?推特发推时的粉丝数量?当您拉出他们的用户文档时,他们的追随者?对于转推,了解他们在最终转推的推文时有多少关注者可能更重要。你可以想象一个社交媒体人物,从 8 个关注者开始,在推特上发布了 140 个晶莹剔透的人物,并在两个月后通过转发获得 150000000 名关注者而获得人气。

【讨论】:

  • 太糟糕了,这是不可能的。好建议,你是对的,现在我也将用户当前状态存储在推文模式中,所以我知道在推文时关注者数。谢谢!
猜你喜欢
  • 2017-12-23
  • 2013-07-06
  • 2021-03-03
  • 2015-01-10
  • 2013-11-03
  • 2021-11-03
  • 1970-01-01
  • 2012-07-15
  • 2021-02-16
相关资源
最近更新 更多