我有一个标记集合和一个对象集合,这些对象具有这些标记的数组。我正在尝试获取一个标签列表,并列出使用它们的项目列表。
标签:
{
...
"tag":"test"
...
}目的:
{
...
"tags": ["test", "test_1"]
...
}预期结果:
{
...
"tag": "test",
"objects": [
{
...
"tags": ["test", "test_1"]
...
}
]
...
}我正在尝试执行以下查找。
{
from: 'object',
let: {
tag: "$tag"
},
pipeline: [
{ $match: {
$expr: {
$eq: ["$tags", "$$tag"]
}
}
}
],
as: 'objects'
}但他并没有把他们团结起来。如果tags不是一个数组,而是一个字符串,那么上面的查找就可以了,但是我需要它是一个数组。如果我用$eq替换$in,它会抱怨预期的第二个参数是一个字符串,但它需要一个数组。交换参数($in: ["$$tag", "$tags"])也不能工作。我不知道该怎么做才对。
发布于 2022-06-21 14:28:24
您可以使用$in
db.tag.aggregate([
{
"$lookup": {
from: "object",
let: {
tag: "$tag"
},
pipeline: [
{
$match: {
$expr: {
$in: [
"$$tag",
"$tags"
]
}
}
}
],
as: "objects"
}
}
])Working 蒙戈游乐场
https://stackoverflow.com/questions/72700324
复制相似问题