【问题标题】:Pymongo only returning id field when empty object is passedPymongo 仅在传递空对象时返回 id 字段
【发布时间】:2018-11-02 06:19:46
【问题描述】:

我使用过 python 和 MongoDB。要连接到 mongo,我正在使用 python 模块 Pymongo。正如我从非常抽象和小的文档中看到的那样。似乎大多数事情都在正常的 MongoDB 集合中工作。但是有一个奇怪的部分与查找查询有关。

在 Mongo Shell 中:

 db.my_collection.find({}, {})
 Results Array Fields:  { _id, field1, field1, field3 ..... etc} 
 //Notice:  Returning all Fields of each Document

在 Python Shell 中:

 pymonogoMongoClient("localhost", 27017)['DB']['my_collection'].find({}, {})
 Results Array Fields:  {_id} 
 Notice  // Only Id is returning for all Docs

我知道通过在 find 的第二个参数中不指定空 {} 可以获得我想要的结果,但这不是我的代码设计所允许的。我正在为我的 Flask 应用程序创建一种 ORM,我必须在其中编写通用数据库函数。这是不允许的。

任何帮助或通过传递参数来获取所有文档将不胜感激。提前致谢

【问题讨论】:

  • 你能发布一个示例文档吗?
  • @laike9m 它应该是可重现的,而无需查看他们的文档之一,并且它“是”可重现的。真正的问题是,当您知道字典中没有键时,为什么您只是不传递投影?而是问题,“如何有条件地添加投影?”
  • 我个人会动态地制作一个参数列表,然后使用find(*find_args) 传递它们。通过这种方式,您可以根据需要动态添加find() 的查询、投影和任何支持的选项。如果我正在编写 ODM,那就是。

标签: python mongodb pymongo


【解决方案1】:

根据documentation,这就是发生这种情况的原因:

projection(可选):应返回的字段名称列表 在结果集或 dict 中指定要包含的字段或 排除。如果投影是一个列表“_id”将始终返回。用一个 dict 从结果中排除字段(例如,projection={‘_id’: 错误})。

不过,您可以这样做:

if projection == {}:
    projection = None

pymonogoMongoClient("localhost", 27017)['DB']['my_collection'].find({}, projection)

【讨论】:

  • 感谢@dnickless 这就是我无法从文档中理解的内容。通过无时它工作正常。谢谢
猜你喜欢
  • 2021-09-19
  • 2021-09-28
  • 2012-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多