node.js - 带有 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);
}
解决方案
您可以通过使用$in
运算符来做到这一点。
const posts = await Post.find({ _id: { $in: user.likes.map(l => l.post) } });
res.json(posts);
推荐阅读
- c - 计算字符串中所有数字的总和
- r - 堆叠条中的 X 轴和右框
- node.js - NodeJS 集群和工作线程
- android - 如何从布局(视图)创建 GIF 文件?
- css - Centos7、Apache、Mod Passenger 和 Ruby 2.6.3 的权限被拒绝
- jenkins - 如何在詹金斯中止之前做一个动作
- r - 从列表列表中创建数据框,但每个元素都是一列
- javascript - 如何在 JavScript 中访问 Rails 模型属性?
- python - 为 MultiIndex 中的每个唯一元素重复 DataFrame 的索引
- android-databinding - androidx.navigation:navigation-fragment:2.2.0, get "You must call removeView() on the child's parent first." 在 navController.popBackStack()