mongodb - 如何检查对象在 MongoDB 的其他文档中
问题描述
我有两个文档,我想在用户登录时显示 isfav 在产品列表中
第一个产品
{
_id: 1231,
name: 'Product 1'
}
{
_id: 1232,
name: 'Product 2'
}
{
_id: 1233,
name: 'Product 3'
}
现在我想在用户文档中进行 $lookup,其中我最喜欢的产品保存在对象中
第二个文档用户
{
_id: 123abcd,
name: 'ABCD' ,
favProducts :[1211,1232]
}
我想要结果喜欢
{
_id: 1231,
name: 'Product 1' ,
isFav: true
}
{
_id: 1232,
name: 'Product 2' ,
isFav: true
}
{
_id: 1233,
name: 'Product 3' ,
isFav: false
}
解决方案
下面是一个聚合管道,它检索完整的产品列表,该列表指示给定用户是否收藏了该产品。
[
{$lookup: {
from: 'users',
localField: '_id',
foreignField: 'favProducts',
as: 'users'
}},
{$unwind: {
path: "$users",
preserveNullAndEmptyArrays: true
}},
{$group: {
_id: "$_id",
name: { $first: "$name" },
isFav : { $max :
{ $eq : [ "$users._id", "user2" ] } }
}}
]
$lookup
将集合中的信息提取users
到products
集合中,并将其放入名为 的数组users
中。
$unwind
展开users
数组并为每个产品/用户组合创建一个对象。
$group
将文件重新组合在一起_id
。它用于$max
检查是否有任何用户 _id 与登录用户的 id 匹配。
推荐阅读
- javascript - 我们可以通过 2 个选择框显示图表吗?使用谷歌图表
- javascript - REST API 如何使结果仅在经过身份验证的移动应用程序上可用?
- java - 如何配置 ScheduledExecutorService 以使用 webapp 类加载器
- php - 无法识别 PHP 工匠
- mysql - AWS Aurora Multi-Master 集群是否适合 WordPress
- scala - Option[F[ShoppingCart]] 到 F[Option[ShoppingCart]] 之间的转换
- flutter - Flutter video_compress 然后 ffmpeg 将视频修剪到 30 秒失败,日志无穷无尽
- packer - packer hcl2 如何在 -var-file 或替代模式中使用本地变量
- c# - 在 C#/ MSTest 中,我如何知道正在运行的测试中的当前 DataRow 数据
- visual-studio-code - 为什么 Jupyter notebook 在 VS Code 中显示为 JSON 文件?