【问题标题】:I need query to return all document that contains a specific string in list我需要查询以返回列表中包含特定字符串的所有文档
【发布时间】:2019-08-22 19:57:50
【问题描述】:

我需要执行 django 查询 以返回列表中包含特定字符串 "amazon" 的所有文档,并且此列表存储在 dict 中。 该字段是一个字典,字典中的每个键都包含一个列表类型。

我的文档示例:

{
    "collector_id" : 80,
    "market_info" : {
        "market_name_list" : [ 
            "amazon", 
            "souq"
        ],
        "key_2" : [
            "item1_in_list",
            "item2_in_list",
            "item3_in_list"
        ]
    }
}  

market_info 是字典域。

我尝试了很多查询,但都失败了。

query_set = myModel.objects.filter(market_info__contains= 
{'market_name_list': ['amazon']})

这是我的模特:

from djongo import models as db

class info(db.Model):
    collector = db.ForeignKey(Collector, null=True,                   
              on_delete=db.SET_NULL)
    market_info = db.DictField(default={'market_name_list': [],
                                        'search_for_list': []
                                       })

【问题讨论】:

  • 你能显示你的model吗? expected inputexpected output?
  • 我添加了我的模型。预期输入和输出是什么意思?
  • 列表总是在key_2吗?
  • @CarlBrubaker 是的,我为字典中的每个键存储了一个列表

标签: python django django-models django-views djongo


【解决方案1】:
found = []
for i in info.objects.all():
    for m in i.market_info:
        if market_info[m] == 'string':
           found.append(i)

【讨论】:

  • 我会试试这个...但是如果我有超过 20K 的文档,性能会怎样?
  • 您必须以某种方式浏览所有数据。可能有比这更快的方法,但您可能需要考虑重写数据的处理方式。
  • 谢谢...它的工作。我真的希望有一个查询这样做。我会等一天再等一个答案,如果没有答案我会接受你的答案。
  • 我删除了第二个for,因为我已经准备好知道任何我会搜索它的键,如果更新为if 'amazon' in i.market_info['market_name_list']:谢谢:)
  • 请记住,使用in 也会在结果中为您提供fooamazonbar
猜你喜欢
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-07
  • 1970-01-01
  • 2017-03-13
相关资源
最近更新 更多