我有一个像下面这样的集合:
`{
"topics" : [
{
"id" : "2",
"name" : "Test1",
"owner" : [
"123"
]
},
{
"id" : "3",
"name" : "Test2",
"owner" : [
"123",
"456"
]
}
]
}`
由于此数据在单个文档中,并且我只希望基于其owner
匹配元素,因此我使用以下查询(在聚合中使用筛选器),但我得到0个匹配元素。查询:
提前感谢...!!
db.getCollection('topics').aggregate([
{"$match":{"topics.owner":{"$in":["123","456"]}}},
{"$project":{
"topics":{
"$filter":{
"input":"$topics",
"as":"topic",
"cond": {"$in": ["$$topic.owner",["123","456"]]}
}},
"_id":0
}}
])
此查询应生成以下输出:
{
"topics" : [
{
"id" : "1",
"name" : "Test1",
"owner" : ["123"]
},
{
"id" : "2",
"name" : "Test2",
"owner" : ["123","456"]
}
]
}
2条答案
按热度按时间dwbf0jvd1#
因为
topic.owner
是一个数组,所以不能直接使用$in
,因为它比较数组是否在数组中。相反,您应该执行以下操作:
$filter
-过滤topics
数组中的文档。1.1.
$gt
-比较结果 1.1.1 大于0。1.1.1.
$size
-从结果 1.1.1.1 中获取数组的大小。1.1.1.1.
$setIntersection
-将topic.owner
数组与输入数组求交集。Demo @ Mongo Playground
hec6srdp2#