我使用聚合来解决这个问题,我的标签和国家/地区都有类别,标签是标签数组,国家/地区是字符串。
{
"_id" : ObjectId("54c8e2a72ec614e33c20595a"),
"__v" : 0,
"category_id" : 3,
"country" : "ar",
"name" : "Niños",
"tags" : [
"juvenil",
"nino",
"ninos",
"niño",
"escolar",
"escolares",
"cartuchera",
"unibike",
],
"parent" : ObjectId("54c8e2a72ec614e33c20594b"),
"updated_at" : ISODate("2016-06-06T15:13:26.659Z"),
"status" : true,
"slug" : "ropa-de-ninos",
"class" : "kids",
"order" : ""
}
我正在做一个
的聚合db.getCollection('categories').aggregate([
{ '$match':
{ tags:
{
'$in': [
'ninos',
'escolar'
]
},
country: 'ar'
}
},
{ '$project':
{
name: 1,
parent: 1,
country: 1,
tags: 1
}
},
{ '$unwind': '$tags' },
{
'$group':
{ _id: '$_id', names: { '$push': '$tags' }, matches: { '$sum': 1 } }
},
{ '$sort': { matches: -1 } }
])
现在,如果你查看查询我同时拥有一个标签$ in和一个国家匹配,现在同时打开,我没有结果,但是如果我带走了这个国家,那就完美了。
我做错了什么?我似乎无法解决这个问题,我已经尝试将$ match分开,将国家放在第一位,然后在放开标签后再匹配。