猫鼬将多个对象的嵌套数组提取到一个数组中

时间:2018-12-17 10:49:31

标签: javascript node.js mongodb mongoose

const userSchema = new Schema(
  {
    _id: Schema.Types.ObjectId,
    name: String,
    posts: [{ type: Schema.Types.ObjectId, ref: "Post" }],
    following: [{ type: Schema.Types.ObjectId, ref: "User" }]
  }
};

我想从'following'数组中的所有Users中提取所有帖子,将它们放入一个单独的数组中,对它们进行排序,然后显示前20个。我想知道在游标中还是如果我必须将其加载到内存中。

function createFeed(user) {
  User.findOne({ name: user })
    .populate({
      path: "following",
      populate: {
        path: "posts"
      }
    })
//put all the posts into one array
.sort(...)  //sort by time created
.limit(...) //only get the newest n posts
.exec((err, result) => {
      if (err) console.log("error", err);
      console.log("result", //sorted tweets array);
 });
};

(我不想过滤“帖子”集合中的所有帖子,以检查它们是否由用户制作,因为这会贵很多)

2 个答案:

答案 0 :(得分:1)

您可以在mongoDB中使用distinct查询

db.User.distinct('following',{})

答案 1 :(得分:0)

如果您尝试使用条件过滤填充,那么您应该这样做:

User.findOne({ name: user })
.populate({
    path: 'posts',
    match: { user: 'XXX' }
})

更好的方法是使用用户过滤条件查询帖子,然后填充用户详细信息。