У меня есть коллекция КАРТ монго со списком объектов тегов. (вид метаданных)
"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
). Кроме того, может быть несколько документов с одним и тем же tagName с другим значением.
Я проиндексировал теги как tags.tagName :1
и tags.tagValue: 1
Теперь я хочу выполнить поиск по этим тегам, где некоторые теги имеют значения с некоторыми обязательными, а некоторые с необязательными
то есть смешивание И / ИЛИ
например, где
{{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: {
$ или: [
{tagName: 'CITY', tagValue: 'delhi'},
{tagName: 'COUNTRY', tagValue: 'in'}
]
}}});
Теперь не в состоянии объединить эти два и выполнить мои требования. Я новичок в MongoDB и первый проект с Монго. Пожалуйста, помогите достичь моего требования? ИЛИ любая другая стратегия для достижения этих целей.