我有一个 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 :1
和tags.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"}
]
} )