python - 具有以列表中指定的前缀开头的属性的对象的 MongoEngine 查询列表

标签 python mongodb mongoengine nosql

我需要在 Mongo 数据库中查询具有以列表中任何前缀开头的特定属性的元素。现在我有一段这样的代码:

query = mymodel(terms__term__in=query_terms)

这匹配在列表“terms”中具有明确出现在列表“query_terms”上的 StringField“term”的项目的对象。我想要实现的是让对象在列表“terms”上有一个项目,该列表具有 StringField“term”,以列表“query_terms”上出现的任何前缀开头。是否可以在一个查询中执行此操作,而无需在数据库中存储“术语”的所有可能前缀? 编辑: 下面的解决方案效果很好,但现在我必须找到以列表中每个前缀开头的术语的对象。我变了

query = reduce(lambda q1, q2: q1.__or__(q2), 
           map(lambda prefix: Q(terms__term__startswith=prefix)))

query = reduce(lambda q1, q2: q1.__and__(q2), 
           map(lambda prefix: Q(terms__term__startswith=prefix)))

但这不起作用。我最终收到以下错误:

InvalidQueryError: Duplicate query conditions: terms__term__startswith

有什么想法吗?

最佳答案

如果您查询一个术语的值,您可以过滤以前缀开头的值,如下所示:

MyModel.objects.filter(terms__term__startswith='foo')

如果您需要过滤多个前缀,则必须为此创建 Q 对象:

MyModel.objects.filter(Q(terms__term__startswith='foo') | Q(terms__term__startswith='bar'))

如果需要动态创建查询:

prefixes = ['foo', 'bar', 'baz']
query = reduce(lambda q1, q2: q1.__or__(q2), 
               map(lambda prefix: Q(terms__term__startswith=prefix), prefixes))
MyModel.objects.filter(query)

关于python - 具有以列表中指定的前缀开头的属性的对象的 MongoEngine 查询列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10348874/

相关文章:

python - celery 节拍在同一时间间隔组下安排多个任务

python - 使用 scikit-learn 对银行交易的多个输出进行分类

python - pymssql 执行存储过程但没有返回结果

mongodb - MongoDB 的 fsync 是做什么用的?

javascript - mongodb 服务器端 javascript 实际上是客户端?

python - Mongoengine:查询 MapField

Python从xlrd创建的列表中删除 'text'

mongodb - 如何使用 interface{} 动态查询 mongodb

mongodb - 使用 mongoengine 连接到 MongoDB atlas 集群

python - MongoEngine - 如何关闭游标