具有键值对搜索的MongoDB标签



我有一个 mongo 集合 'CARDS' 有一个标签对象列表。(元数据种类(

"tags" : [
{
"tagValue" : "retail", 
"tagName" : "CARD_TYPE"
},
{
"tagValue" : "fast food ", 
"tagName" : "CARD_SUB_TYPES"
}, 
{
"tagValue" : "ghy", 
"tagName" : "LOCATION"
}, 
{
"tagValue" : "t1", 
"tagName" : "LOCATION_AREA"
}, 
{
"tagValue" : "guest", 
"tagName" : "LOCATION_AREA_TYPE"
}, 
{
"tagValue" : "departure", 
"tagName" : "LOCATION_AREA_WAY"
},
{ 
"tagName" : 'CITY', 
"tagValue" : 'delhi' 
}
],

现在,我想根据这些标签从集合中搜索文档。 可能没有任何带有键(tagName(和值(tagValue(的标记对象。此外,可能有多个文档具有相同的标签名称,具有不同的值。 我将标签索引为tags.tagName :1tags.tagValue: 1

现在我想从那些带有一些标签的标签中搜索,这些标签具有一些必需的值和一些可选的值 即混合 AND/OR 喜欢在哪里

{{tagName:LOCATION AND tagValue:ghy} AND {tagName:LOCATION_AREA AND tagValue:t1}}
OR {{tagName:CITY AND tagValue:delhi} AND { tagName: 'COUNTRY', tagValue: 'in' }}
OR { tagName: 'ANYTHING', tagValue: 'any_value' } ..

我查询了所有必需值必须显示为

.find({ 标签: { $all: [ { $elemMatch: { tagName: 'LOCATION', tagValue: 'ghy' } }, { $elemMatch: { tagName: 'LOCATION_AREA', tagValue: 't1' } } ] } });

并尝试了可选的

.find({ 标签: { $elemMatch:{ $or: [ { tagName: 'CITY', tagValue: 'delhi' }, { tagName: 'COUNTRY', tagValue: 'in' } ] } } });

现在无法将这两者结合起来并满足我的要求。我是MongoDB的新手,也是mongo的第一个项目。请帮助实现我的要求?或任何其他实现这些目标的不同策略。

如果我正确理解了这个问题,那么下面的查询将帮助您满足您的要求。

db.things.find( {
$and : [
{ 
$or : [ 
{"tagName" : "CITY", "tagValue" : "delhi"},
{"tagName": "COUNTRY", "tagValue" : "in" }
]
},
{ "tagName" : "COUNTRY", "tagValue" : "in" },
{"tagName" : "LOCATION_AREA", "tagValue" : "t1"} 
]
} )

最新更新