当前位置: 首页 > 知识库问答 >
问题:

参考文档上带有过滤器的猫鼬分页结果

佴德曜
2023-03-14

我有一个用户和post文档,如下所示:

user: {
"name": "Test",
interests: [
  "Sports",
  "Movies",
  "Running"
 ]
}

post: {
 "title": "testing",
 "author": ObjectId(32432141234321411) // random hash   
}

我想查询帖子,并获取所有作者有“运动”、“跑步”作为兴趣的帖子,这将是一个分页查询。

我如何在猫鼬中做到这一点?如果不是,我应该使用什么替代方案?

共有2个答案

淳于思淼
2023-03-14

我使用了下面的方法,虽然使用异步/等待方法给出答案,但实际上我使用的是promise。

const fetchPosts = async (req, res) => {
  //First find users having those interests.
 const users = await User.find({ 
    interests: {
     "$in": ["Sports", "Movies"]
    } 
  })
  .select('_id')
  .exec();

 // map over array of objects to get array of ids
 const userIds = users.map(u => u._id);

 // Then run an in filter on Post collection against author and 
 //userIds
 const posts = await Post.find({
   author: {
     "$in": [userIds]        
    } 
  }) 
  .limit(15)
  .skip(0)
  .exec();
}
高博涉
2023-03-14

使用限制和跳过进行分页

var limit = 5;
var page = 0; // 1,2,3,4

return Model.find({
        /* Some query */
    })
    .limit(limit)
    .skip(limit * page)
    .exec().then((data) => {
        console.log(data);
    });

试试这个

const findUser = (interests) => {
    return User.find({
        interests: {
            $in: interests
        }
    }).exec();
};

const findPost = (query, page = 0) => {
    const limit = 5;
    return Model.find(query)
        .limit(limit)
        .skip(limit * page)
        .exec();
};

var execute = async () => {
    const users = await findUser(["Sports", "Movies", ]);
    users.forEach(user => {
        user.post = await findPost({
            "post.author": user._id
        });
    });
    return users;
}
 类似资料:
  • 问题内容: 我在子文档的Mongoose中尝试执行findOne查询,但运气不佳… 我的架构如下所示: 我只需要从我使用此查询的文档中查找用户的电子邮件 任何帮助,将不胜感激! 问题答案: 您缺少对象的级别,因此您的代码需要更改为以下内容:

  • 我刚刚被这个问题缠住了。我有两个猫鼬模式: 问题是,如何从每个父文档中获取所有子文档(在这种情况下,对象)?假设我有一些数据: 我想在一个查询中检索所有18岁以上的儿童。有可能吗?每一个回答都将不胜感激,谢谢!

  • 问题内容: 将嵌入式阵列保存到Mongoose模型时遇到麻烦。 请参阅底部的编辑。 我有一种使用Mongoose在Express中创建BlogPost并将其存储在mongo中的数据的表单。我可以创建和查看新的博客文章,但是我只是在BlogPost模型中添加了嵌入式文档架构Feed,但无法获取Feed数组以将其从表单保存到模型中 码: BlogPosts.js web.js 翡翠形式 如果我填写此表

  • 我知道在最新版本的Mongoose中,您可以将多个文档传递给create方法,在我的例子中,甚至可以传递一个文档数组。 我的问题是数组的大小是动态的,所以在回调中创建一个对象数组会很有帮助。 文档中没有,但这样做可能吗?

  • 参考文档 Dockerfie 官方文档:https://docs.docker.com/engine/reference/builder/ Dockerfile 最佳实践文档:https://docs.docker.com/develop/develop-images/dockerfile_best-practices/ Docker 官方镜像 Dockerfile:https://github.

  • 问题内容: 我的猫鼬模式之一是多对多关系: 如果我删除了一个组,是否仍然可以从所有用户的“组”数组中删除该组objectId? 问题答案: 您正在为此使用中间件。在中间件功能中,是否删除了组实例,您可以通过其方法访问其他模型。因此,您可以执行以下操作: 或者,如果您要支持组实例中的字段可能不完整的情况,则可以执行以下操作: 但正如WiredPrairie所指出的那样,对于此选项,您需要一个索引才能