带有变量的PyMongo查询不返回结果

罗伊斯·舒尔茨

我正在尝试运行使用字符串变量构造的查询,但是奇怪的是,仅在使用变量时我没有任何结果。我认为这可能是pymongo软件包中的错误,但我想确保自己没有遗漏任何东西。

我正在运行pymongo v3.11.2,mongo服务器v4.4和python v3.9。

该查询不返回任何结果,并且立即退出且没有错误:

keyword = 'some text'
results = db.myCollection.aggregate([
    {
        '$match': {
            '$text': {
                '$search': keyword  # string stored as variable
            }
        }
    }
])

经过一段时间查询后,此查询返回了预期的结果:

results = db.myCollection.aggregate([
    {
        '$match': {
            '$text': {
                '$search': 'some text'  # bare string instead of variable
            }
        }
    }
])

我在$ regexFindAll步骤中得到了类似的问题。在投影步骤中使用变量时,我没有任何问题。

我希望这将是一个常见的用例。例如,一个python后端接收用户输入并返回匹配的搜索结果。

我尝试将变量转换为字符串,对其进行编码,然后在其他地方构造查询都没有成功。

腹部克星

不可复制。下面的bash脚本(需要docker)在记录的确切环境中模拟您的代码,并使用变量参数正确返回值。

PROJECT_NAME=text_search

MONGODB_VERSION=4.4
PYTHON_VERSION=3.9
PYMONGO_VERSION=3.11.2

docker network create local_temp 2> /dev/null
docker run --rm --network local_temp -d --name mongodb_temp mongo:${MONGODB_VERSION}

cd "$(mktemp -d)" || exit

cat << EOF > requirements.txt
pymongo==${PYMONGO_VERSION}
EOF

cat << 'EOF' > ${PROJECT_NAME}.py
from pymongo import MongoClient, TEXT

db = MongoClient('mongodb://mongodb_temp')['mydatabase']

db.myCollection.create_index([('file_name', TEXT)])
db.myCollection.replace_one({'_id': 1}, {'_id': 1, "file_name": "Contains some text we are searching"}, upsert=True)

keyword = 'some text'

cursor = db.myCollection.aggregate([
    {'$match': {'$text': {'$search': keyword}}},
    {'$project': {'file_name': 1}}])

for item in cursor:
    print(item)
EOF

cat << EOF > Dockerfile
FROM python:${PYTHON_VERSION}
COPY ./* /
RUN pip install -r /requirements.txt
CMD ["python", "${PROJECT_NAME}.py"]
EOF

docker build --tag ${PROJECT_NAME}:latest .
docker run --rm --network local_temp --name ${PROJECT_NAME} ${PROJECT_NAME}:latest

docker stop "$(docker ps -a -q --filter name=mongodb_temp)" > /dev/null
docker image rm ${PROJECT_NAME}:latest > /dev/null
docker network rm local_temp > /dev/null

印刷品:

{'_id': 1, 'file_name': 'Contains some text we are searching'}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PyMongo查询不返回结果,尽管同一查询在mongoDB shell中返回结果

来自分类Dev

Access中带有YesNo字段的SQL查询不返回结果

来自分类Dev

带有“日期= YYYY-MM-DD”的GAE Search API查询不返回任何结果

来自分类Dev

Access中带有YesNo字段的SQL查询不返回结果

来自分类Dev

选择查询变量不返回正确结果的查询

来自分类Dev

带有搜索变量参数的 Npgsql 查询返回空结果 C# Postgres

来自分类Dev

查询不返回结果

来自分类Dev

SQL Server ContainsTable不返回带有术语“ inn”的结果

来自分类Dev

带有JSON的jQuery $ .post不返回结果

来自分类Dev

带有Angular的NodeJs API不返回JSON结果

来自分类Dev

带有 angular2 的 redux 不返回结果

来自分类Dev

带有日期直方图的管道聚合不返回预期结果

来自分类Dev

SQLite查询不返回所有结果行

来自分类Dev

使用Rails ActiveRecord返回带有嵌套结果的查询

来自分类Dev

Solr查询仍返回带有停用词的结果

来自分类Dev

带有内连接的 MYSql 查询返回重复的结果

来自分类Dev

mongo查询不返回结果

来自分类Dev

ElasticSeach查询不返回结果

来自分类Dev

带有gFlags的Yahoo YQL查询不返回任何内容

来自分类Dev

URL 变量不返回结果

来自分类Dev

Codeigniter查询结果返回带有setter的自定义结果对象

来自分类Dev

Codeigniter查询结果返回带有setter的自定义结果对象

来自分类Dev

SQL查询结果不返回空值

来自分类Dev

为什么此查询不返回结果?

来自分类Dev

PHP的SQL查询不返回正确的结果

来自分类Dev

laravel原始查询不返回结果

来自分类Dev

MySQL查询不返回任何结果

来自分类Dev

Mongodb查询不返回任何结果

来自分类Dev

Mongo $ meta textScore不返回查询结果

Related 相关文章

热门标签

归档