首页 > 解决方案 > 带有 ID 数组的 MongoDB 查询

问题描述

我有这个收藏:

{
        "_id": "5f1bd6c7d90cb03e845adbbf",
        "name": "John Doe",
        "likes": [
            {
                "_id": "5f378b105d337347e8958a50",
                "user": "5f357ac9c0d2019cc82b5a2f",
                "post": "5f3032894cd4a000175d333c",
            },
            {
                "_id": "5f354e351a98dd7c7081d72d",
                "user": "5f357ac9c0d2019cc82b5a2f",
                "post": "5f3bf7a44ed4f031bc575c2b"
            },
            {
                "_id": "5f354cc2879f8a81b0ab28fe",
                "user": "5f30380288a63e001755401e",
                "post": "5f310ce5e18bad001792fb60"
            }
        ]

现在我想查找与 likes.post 的 ID 匹配的所有帖子。

这可行,但显然只给了我一个帖子:

const posts = await Post.find({ _id: [user.likes[0].post] });
res.json(posts);

我尝试了一个 for 循环,但它只返回一个帖子。当我控制台记录这个时,我得到所有匹配的帖子:

for (let i = 0; i < user.likes.length; i++) {
  const posts = await Post.find({ _id: [user.likes[i].post] });
  res.json(posts);
}

标签: node.jsarraysmongodbexpress

解决方案


您可以通过使用$in运算符来做到这一点。

const posts = await Post.find({ _id: { $in: user.likes.map(l => l.post) } });
res.json(posts);

文档


推荐阅读