Mongodb $lookup 使用多个条件 mongodb
Posted
技术标签:
【中文标题】Mongodb $lookup 使用多个条件 mongodb【英文标题】:Mongodb $lookup using with multiple criteria mongodb 【发布时间】:2020-09-07 20:02:13 【问题描述】:
$lookup:
from: "Comment",
let:
p_id: "$_id",
d_id: "$data_id",
,
pipeline: [
$match:
$expr:
$and: [
$eq: [
"$_id",
"$$p_id"
]
,
$eq: [
"$data_id",
"$$d_id"
]
]
],
as: "subComment"
https://mongoplayground.net/p/GbEgnVn3JSv 我擅长 mongoplayground,但试图把我的想法放在那里
我想获取基于 doc_id 和 post_id 的帖子评论,用于 mainComment 查询看起来不错,但子命令不好。请指导一下
它很简单,因为一个帖子可以有多个评论,需要评论计数基于 Post.data._id 等于 Comment.doc_id 和 Post._id 在 Comment.post_id 中
【问题讨论】:
【参考方案1】:不确定“mainComment”和“subComment”是什么,我相信你错过了前面的美元符号
$project:
_id: 1,
main_comments_count:
$size: "$mainComment"
,
sub_comments_count:
$size: "$subComment"
,
更新
你在操场上做错的是你在lookup.let
阶段使用了$data
。 $data
是一个文档,您实际要查找的字段是 $data._id
。
localField
和foreign
。那里不需要使用let
和pipeline
。
db.setting.aggregate([
$lookup:
from: "site",
"let":
"pid": "$data._id" //here
,
"pipeline": [
"$match":
"$expr":
"$in": [
"$doc_id",
"$$pid"
]
],
"as": "subComment"
,
$addFields:
countRecord: "$subComment"
])
即这给出了相同的输出
db.setting.aggregate([
$lookup:
from: "site",
localField: "data._id",
foreignField: "doc_id",
as: "subComment"
,
$addFields:
countRecord: "$subComment"
])
【讨论】:
更新了操场上的代码,它应该返回我两个,而不是 0 见操场https://mongoplayground.net/p/GbEgnVn3JSv @SunilDubey 首先,我认为您将不得不使用“arrayElemAt”从数组中获取第一个文档。其次,在“eq”中,您应该使用“$post_id”和“$doc_id”,如第二个集合中所示 如果我想显示计数 "data": [ "_id": ObjectId("5e7cd2019b1c522b15cca6fe"), "url": "xyz.jpg", "width": 1000, “高度”:1000,“计数”:2,“_id”:ObjectId(“5e7cd2019b1c522b15cca6fd”),“url”:“verr.jpg”,“宽度”:601,“高度”:1000]跨度> 你可以看到这个匹配数据的_id 5e7cd2019b1c522b15cca6fe 所以它应该添加到这个数组中是可能的 好的@chakwok,一旦你回到电脑,我也在尝试..以上是关于Mongodb $lookup 使用多个条件 mongodb的主要内容,如果未能解决你的问题,请参考以下文章
如何在 mongodb 中使用 $lookup 加入多个集合