【问题标题】:MongoDB tags with key value pair search带有键值对搜索的 MongoDB 标签
【发布时间】: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 :1tags.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


【解决方案1】:

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

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

【讨论】:

  • 谢谢,我试试这个
猜你喜欢
  • 2012-08-22
  • 2014-08-19
  • 2016-12-06
  • 1970-01-01
  • 2016-09-25
  • 1970-01-01
  • 2015-11-15
  • 2023-04-11
  • 1970-01-01
相关资源
最近更新 更多