【发布时间】:2018-06-30 09:27:40
【问题描述】:
我有一个 mongo 集合“卡片”,其中包含标签对象列表。 (元数据的种类)
"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 的值,一些是必需的,一些是可选的 即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({ 标签:{ $全部:[ { $elemMatch: { tagName: '位置', tagValue: 'ghy' } }, { $elemMatch: { tagName: 'LOCATION_AREA', tagValue: 't1' } } ] } });
并尝试了这个作为可选
.find({ 标签:{ $elemMatch: { $或:[ { tagName: 'CITY', tagValue: '德里' }, { tagName: '国家', tagValue: 'in' } ] } } });
现在无法将这两者结合起来并满足我的要求。我是 MongoDB 的新手,也是 mongo 的第一个项目。请帮助实现我的要求?或者任何不同的策略来实现这些。
【问题讨论】:
-
在我的第一个查找查询中,我想搜索 LOCATION = 'ghy' 和 LOCATION_AREA = 't1' 的所有卡片。结果正如预期的那样。此外,在第二个查询中,我想搜索所有具有 CITY = 'delhi' 或 'country'='in' 的卡片。结果也如预期。现在如何将这两者结合起来。 ?
标签: mongodb mongodb-query database-metadata