首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pymongo:搜索字典或操作

pymongo:搜索字典或操作
EN

Stack Overflow用户
提问于 2012-01-14 11:15:45
回答 2查看 3.4K关注 0票数 3

我使用下面的代码试图获得所有的记录,"user_name“字段或"text”字段包含指定的关键字,看起来pymongo将操作视为AND,如何指定pymongo将其视为" OR“操作?

代码语言:javascript
复制
search_dict = {}

text_regex = ".*" + key + ".*";
text_reg = re.compile(text_regex,re.IGNORECASE)
search_dict["text"] = text_reg

user_name_regex = ".*" + key + ".*";
user_name_reg = re.compile(user_name_regex,re.IGNORECASE)
search_dict["user_name"] = user_name_reg

records = gLife_Article_Collection.find(search_dict)
EN

回答 2

Stack Overflow用户

发布于 2012-01-17 18:05:06

@qiao是正确的$or语法是正确的这里有一个完整的例子:

代码语言:javascript
复制
import re
from pymongo import Connection
connection = Connection()
db = connection.test_database
db.regex_test.drop()

# Create some sample docs
db.regex_test.save({"user_name": "Rozza", "text": "Writing an example for Bin Chen based on qiao's answer"})
db.regex_test.save({"user_name": "qiao", "text": "Answering Bin Chen's question"})
db.regex_test.save({"user_name": "Bin Chen", "text": "Reading rozza's answer"})

# Do a regex $or query simple example
search_dict = {"$or": [
    {"user_name": {"$regex": "^Rozza"}}, 
    {"text": {"$regex": "rozza"}}
]}
assert db.regex_test.find(search_dict).count() == 2

# Do a regex $or query with re.compile
search_dict = {"$or": [
    {"user_name": re.compile("*.Rozza.*", re.IGNORECASE)}, 
    {"text": re.compile("*.Rozza.*", re.IGNORECASE)}
]}
assert db.regex_test.find(search_dict).count() == 2
票数 4
EN

Stack Overflow用户

发布于 2012-01-14 11:34:35

特殊的键$or将允许您进行逻辑组合,请参阅官方MongoDB文档:http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24or

代码语言:javascript
复制
search_dict = {'$or': [{'text': text_reg}, {'user_name': user_name_reg}]}
records = gLife_Article_Collections.find(search_dict)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8859874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档