在MongoDB中,我在根集合中有许多这样的文档 struct

 _id: ObjectId()
 A : "a"
 B : "b"

 _id:ObjectId()
 A : "c"
 B : "d"

然后我想根据用户输入查找文档,例如

data = request.data
item_A = data.get('A', None)
item_B = data.get('B', None)
for item in root.find({
    'A': item_A,
    'B': item_B
}):
    print(item)

但问题是,如果用户只想根据A查找文档,并且没有Item_B的输入值,那么Item_B将为None,因此代码不会返回任何内容. 有什么建议吗?

推荐答案

您只需要正确地构建查询,如果B个输入为无,则只需在查询中忽略它-您可以通过多种方式来实现这一点-以下是一个示例:

data = request.data
item_A = data.get('A', None)
item_B = data.get('B', None)
query = {}

if item_A is not None:
    query['A'] = item_A
    
if item_B is not None:
    query['B'] = item_B
    
for item in root.find(query):
print(item)

编辑

例如,另一种方法是创建动态查询替换.

data = request.data
item_A = data.get('A', { "$exists": True })
item_B = data.get('B', { "$exists": True })

for item in root.find({
    'A': item_A,
    'B': item_B
}):
    print(item)

Django相关问答推荐

查询在对象中使用django查询与一个包含句子

如何在Django REST框架中使用FactoryBoy创建不同的项目

错误``Forbidden (403) CSRF 验证失败.请求中止.``` 当try 登录管理员时

Django基于查询集动态筛选字段名称

如何在Django管理自定义筛选器中包含自定义模型方法?

NoneType对象没有属性保存Django

如何在 django 的列表中查找所有对象作为对象?

如何将表单中的用户字段设置为当前登录的用户?

NoReverseMatch 错误

django.request 记录器没有传播到根目录?

django - pisa:将图像添加到 PDF 输出

Django - 如何从模型中 Select 特定列?

如何在Django中获取一个组的所有用户?

使用 lambda 作为属性的默认值时,Django 1.7.1 Makemigrations 失败

获取 Django 表单中的错误列表

如何查询名称包含python列表中任何单词的模型?

ProgrammingError: 安装 Psycopg2 后,关系django_session不存在错误

Django unique_together 与可为空的 ForeignKey

Django 模型(1054,Unknown column in 'field list')

Django:在模块中实现 status字段的最佳方式