【发布时间】:2021-04-27 14:03:26
【问题描述】:
我有一个集合details,在quotes_id 上有一个字符串值数组,如下所示
{
"quantity": 2000,
"quotes_id": ["SQ-CPQ10037"],
"status": "processed",
"logs": [""],
"product_id": "5ff5cf3dc1ceb9144901da81"
}
还有我的quotes 收藏
{
"_id":"SQ-CPQ10037",
"product_id":"5ff5cf3dc1ceb9144901da81",
...more fields here
}
现在,我正在尝试使用如下查找管道从另一个名为 quotes 的集合中访问此集合
$lookup: {
from: "details",
"let": { "product_id": "$quotes.product_id", "quotes_id": "$quotes._id"},
pipeline: [
{
$match: {
$expr: {
$and: [
{ $in: [ "$quotes_id", ["$$quotes_id"] ] },
{ $eq: [ "$product_id", "$$product_id" ] },
]
}
}
}],
as: "product.productquotes",
},
这是返回空集合。但是,如果我评论该行
{ $in: [ "$quotes_id", ["$$quotes_id"] ] },
然后它会将记录返回给我。我还尝试使用简单的$eq 来处理quotes_id,但结果相同。但是如果我直接运行查询就像
{$and: [{"product_id": ObjectId('5ff5cf3dc1ceb9144901da81')}, {"quotes_id": "SQ-CPQ10037"}]}
在 mongo compass 上,我收到记录没有任何问题。
【问题讨论】:
-
你为什么用
[ ]的$$quote_id包装?$quotes是一个对象吗? -
因为,我用过$in。我尝试使用不带数组括号的 $eq 。结果相同。
标签: javascript node.js mongodb mongoose nosql