database:
[{to_match: [ userID_1, userId_2 ], data: [{...}] },
{to_match: [ userID_1, userId_2, userId_3 ], data: [{...}] },
{to_match: [ ], data: [{...}] }]
当前解决方案:
Replacement.find(
{ applicants: { $elemMatch: { $eq: userId_1 } } },
我尝试了汇总:
$lookup // OK
{ $match: { applicants: { $in: { userId } } } } // issues
谢谢
答案 0 :(得分:0)
总计使用$ lookup和$ match
使用$ elemMatch代替$ in,如下所示:
{ $match: { applicants: { $elemMatch: { $eq: userId_1 } } } }
答案 1 :(得分:0)
仅在一个字段上执行$ elemMatch等同于使用find(link)
通常,有效的方法是限制查找阶段将要处理的数据。 因此,如果我理解正确,则希望过滤“ to_match”数组元素,然后对该结果进行查找。
这是我的建议:-
aggregate([
{
$project : {
to_match: {
$filter: {
input: "$to_match",
as: "item",
cond: { $eq: [ "$$item", "userId_3" ] }
}
},
data : 1
}
},
{
$match : { "to_match" : {$ne : []}}
},
//// Lookup stage here
])
根据您要查找的字段,您可能希望取消此结果。