首页 > 解决方案 > 如果几列是空白或空的,如何获取提取的行

问题描述

我是新手,只有在几列空白时才需要一些帮助来提取记录/行。下面的代码忽略了空白记录并让我得到有价值的记录。有人可以在这里建议吗?

mongo_docs = mongo.db.user.find({"$and":[{"Param1": {"$ne":None}}, {"Param1": {"$ne": ""}}]})

具有预期输出的样本数据

标签: pythonpymongo

解决方案


您正在使用的查询包含ne代表不相等的内容。您可以将其更改为eq(equals) 并检查是否获得了所需的结果。

mongo_docs = mongo.db.user.find({"$or":[{"Param1": {"$eq":None}}, {"Param1": {"$eq": ""}}]})

上述代码的简化也将是:

mongo_docs = mongo.db.user.find({"$or":[{"Param1": {"$eq":None, "$eq": ""}}]})

如果更好地满足您的要求,您也可以使用存在查询。

来自评论:您是绝对正确的,该命令将使用多个参数。

mongo_docs = mongo.db.user.find({"$or":[{"Param1": {"$eq":None, "$eq": ""}}, {"Param2": {"$eq":None, "$eq": ""}},{"Param3": {"$eq":None, "$eq": ""}}]})

此外,如果您想在更大的范围内进行操作,您可以考虑使用文本索引。这些将允许您一次搜索所有测试字段,并且相同的代码应如下所示:

mongo.db.user.createIndex({Param1: "text", Param2: "text", Param3: "text"})
mongo.db.user.find({$text: {$search: ""}})

以上仅适用于文本内容,我还没有遇到任何整数值的实现,但不明白为什么使用其他通配符进行一些小的更改时同样不适用。


参考:

  1. 在 MongoDB 中搜索多个字段的多个值
  2. https://docs.mongodb.com/manual/text-search/
  3. https://docs.mongodb.com/manual/core/index-text/#std-label-text-index-compound
  4. https://docs.mongodb.com/manual/core/index-wildcard/

推荐阅读